Изменение значений в master..sysprocesses [Sybase]
Есть ли способ изменить столбец имя_программы в таблице master..sysprocesses ?
Я нашел два метода, но оба устанавливают имя во время создания соединения:
- Использование параметра appname при выполнении команды isql
- Добавление параметра 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..sysprocesses
table не является «настоящим» столом. Из Справочного руководства: Таблицы> Системные таблицы> 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>')
Дополнительные сведения см. В разделе « Руководство администратора безопасности»&gt; «Управление доступом на уровне и « строк»Справочное руководство: стандартные блоки&gt; Функции Transact-SQL&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