Как получить имя базы данных в триггере входа в систему SQL - PullRequest
1 голос
/ 29 мая 2019

Как получить имя базы данных в триггере входа в систему

пробовал несколько кодов tsql

CREATE TRIGGER tr_stop_excel_users
ON ALL SERVER FOR LOGON
AS
BEGIN
    IF (SELECT DB_NAME() FROM sys.databases) = 'TESTDB' and ORIGINAL_LOGIN() <> N'xx\xxxxxxx' AND APP_NAME() LIKE '%Microsoft Office%'  OR APP_NAME() LIKE '%EXCEL%' OR APP_NAME() LIKE '%ACCESS%
    ROLLBACK;
END

выше DB_NAME всегда дает master

Я пытаюсьчтобы получить имя базы данных в триггере входа в систему, и она никак не работает, я пытаюсь ... ниже DB_NAME всегда master ... я пытаюсь здесь заблокировать пользователей, которые используют Excel для запроса TESTDB база данных….

1 Ответ

0 голосов
/ 29 мая 2019

Если вы используете Db_Name в триггере LOGON, вы получите имя базы данных по умолчанию.Таким образом, когда вы получаете master, это показывает, что база данных по умолчанию для входа в систему master.

Если вам нужно получить другие имена, вам нужно изменить строку подключения в приложении или указать имя базы данных на экране приглашения входа в систему SSMS или в других местах, где вы можете указать имя базы данных (Перейти к Options/Connection Properties/Connect to Database в окне запроса на вход в систему SSMS)

Если вы не укажете имя базы данных, имя входа будет подключено к базе данных по умолчанию, которая установлена ​​в Security/Login/Default Database

Решение для вас

Использование Db_Name не является хорошим вариантом для вас, я рекомендую вам использовать вместо него функцию APP_NAME .

Та же проблема, которая обсуждалась в StackExchange: https://dba.stackexchange.com/questions/40155/prevent-users-from-using-power-pivot-excel-connections-to-a-database

...