1

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

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

4

1 回答 1

0

如果您Db_NameLOGON触发器中使用,您将获得默认的数据库名称。所以当你得到 时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

于 2019-05-29T11:14:37.147 回答