Изменение значений в master..sysprocesses [Sybase]

Есть ли способ изменить столбец имя_программы в таблице master..sysprocesses ?

Я нашел два метода, но оба устанавливают имя во время создания соединения:

  1. Использование параметра appname при выполнении команды isql
  2. Добавление параметра APP= в строку подключения при открытии соединения ODBC.

Я ищу способ изменить его ПОСЛЕ создания.

Я пробовал следующий пример:

          sp_configure "allow updates",1
    go
    
    UPDATE master..sysprocesses
    SET program_name = 'test'
    where hostname = 'server'
    and hostprocess = '23240'
    go
    
    sp_configure "allow updates",0
    go

Но не удалось:

      Could not execute statement.
Table 'sysprocesses' can't be modified.
Sybase error code=270
Severity Level=16, State=1, Transaction State=0
Line 4
You can continue executing or stop.

2 ответа

В master..sysprocessestable не является «настоящим» столом. Из Справочного руководства: Таблицы> Системные таблицы> sysprocesses

Применимо только к главной базе данных. sysprocesses содержит информацию о процессах SAP ASE, но это не обычная таблица. Он создается динамически по запросу пользователя. Никакие обновления системных процессов не допускаются.

Чтобы "сбросить" sysprocesses.program_name вы можете попробовать использовать set_appcontext() функция.

После того, как вашему пользователю базы данных (или связанной роли) были предоставлены разрешения ( grant select on set_appcontext to { user | role }) в базе данных, где вы будете вызывать функцию, я думаю, что может сработать что-то вроде следующего:

      select get_appcontext('SYS_SESSION', 'applname', '<new_app_name>')

Дополнительные сведения см. В разделе « Руководство администратора безопасности»&amp;gt; «Управление доступом на уровне и « строк»Справочное руководство: стандартные блоки&amp;gt; Функции Transact-SQL&amp;gt; set_appcontext» . Также см. Системный прикладной контекст SYS_SESSION для таблицы допустимых SYS_SESSION атрибуты (например, applname).

Изменения в столбце sysprocesses.program_nameне допускаются после его создания. Но в sysprocesses есть три столбца, которые можно изменить после создания соединения.

  • sysprocesses.clientname
  • sysprocesses.clientapplname
  • sysprocesses.clienthostname

Выдержка с веб-сайта Sybase Infocenter :

Изменение информации о сеансе пользователя

Команда включает параметры, позволяющие назначить каждому клиенту индивидуальное имя, имя хоста и имя приложения. Это полезно для различения клиентов в системе, где многие клиенты подключаются к Adaptive Server, используя одно и то же имя, имя хоста или имя приложения.

Частичный синтаксис для set команда:

set [clientname client_name | clienthostname host_name | clientapplname application_name]

где:

client_name - это имя, которое вы назначаете клиенту.

host_name - это имя хоста, с которого подключается клиент.

application_name - это приложение, которое подключается к Adaptive Server.

Эти параметры хранятся в clientname, clienthostname, а также clientapplname столбцы sysprocesses Таблица.

Например, если пользователь входит в Adaptive Server как «client1» , вы можете назначить ему индивидуальное имя клиента, имя хоста и имя приложения с помощью команд, похожих на:

set clientname 'alison'

set clienthostname 'money1'

set clientapplname 'webserver2'

. . .

Используйте идентификатор системного процесса клиента, чтобы просмотреть информацию об их соединении. Например, если описанный выше пользователь «alison» подключается к spid 13 , выполните следующую команду, чтобы просмотреть всю информацию о подключении для этого пользователя:

select * from sysprocesses where spid = 13

Чтобы просмотреть информацию о подключении для текущего клиентского подключения (например, если пользователь «alison» хотела просмотреть информацию о своем собственном подключении), введите:

select * from sysprocesses where spid = @@spid

Другие вопросы по тегам