为了将内部表与第三方数据库访问隔离,我们专门针对该用例创建了模式。第三方登录/数据库用户只能访问那些“公共”模式。
问题在于用户拥有的权限超出了应有的权限,并且许多第三方查询访问内部表。
由于我不能突然删除权限,所以我想一点一点地删除。识别有问题的查询并相应地更改它们。
为此,我尝试使用 Sql Server 数据库审核功能,但看起来我缺少执行所需操作的信息:
可以说我有表[Internal].[Machine]
和视图[Public].[Machine]
,为简单起见,它只是select * from [Internal].[Machine]
. 用户viewer
仅具有选择的权限[Public].[Machine]
。
select * from [Internal].[Machine]
为 (Type=SELECT、ObjectClass=SCHEMA、ObjectName=Internal、PrincipalName=viewer) 添加“数据库审核规范”,会生成和 的条目select * from [Public].[Machine]
。
我的目标是只有一个条目select * from [Internal].[Machine]
,即当查询语句直接访问对象时。据我所知,生成的行不包含区分两者所需的信息。
这是否可以通过 Sql Server 审核/扩展事件功能(或其他功能)实现?
当您在特定模式上指定要审核的对象时,它必须是由两部分组成的名称,在您的情况下,如果您想要进行审核,
[Internal].[machine]
那么数据库审核规范将如下所示,如果您想审计两个对象,在本例中同时审计表和视图,则如下所示,
检测结果:
以用户界面为例。