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



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

尝试了几个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'xxxxxxxxx' 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数据库的用户…。

如果在LOGON触发器中使用Db_Name,将获得默认的数据库名称。因此,当您获得master时,它显示登录的默认数据库是master

如果您需要获得其他名称,您需要在应用程序中更改连接字符串,或在SSMS登录提示屏幕中提供数据库名称,或在任何其他可以提供数据库名称的地方(转到SSMS登录提示符屏幕中的Options/Connection Properties/Connect to Database)

如果您不提供数据库名称,登录将连接到其默认数据库,即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

相关内容

  • 没有找到相关文章

最新更新