如何使用EVENTDATA()在登录触发器中获取数据库名称

时间:2019-05-31 19:57:00

标签: tsql authentication triggers

下面的数据库名称始终为空

我正在尝试使用EVENTDATA()在登录触发器中获取数据库名称,但它无法正常工作,并且似乎EVENTDATA()根本无法正常工作,我正在尝试阻止使用excel查询“测试数据库”。有人可以告诉我这段代码在做什么。

创建触发器tr_block_excel_users 在所有服务器上登录 AS

声明@data XML 将@DatabaseName声明为varchar(128)

SET @data = EVENTDATA(); 设置@DataBaseName = @ data.value('((/ EVENT_INSTANCE / DatabaseName)[1]','nvarchar(128)')

开始     IF(选择@DatabaseName)='TestDB'和ORIGINAL_LOGIN()<> N'xx \ xxxxxxxex'AND APP_NAME()喜欢'%Microsoft Office%'或APP_NAME()喜欢'%EXCEL%'     回滚; 结束

我希望使用EVENTDATA()获得数据库的名称,但是获得一个空白的数据库名称,

1 个答案:

答案 0 :(得分:0)

如果您只是尝试获取数据库并将其加载到变量中,则可以尝试:

 SET @DatabBaseName = SELECT DB_NAME()