如何在登录SQL触发器中获取数据库名称

时间:2019-05-29 10:50:46

标签: sql-server tsql ddl-trigger

如何在登录触发器中获取数据库名称

尝试了几种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 :(得分:0)

如果您在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