我们的SQL审核员遇到的问题是公共角色能够从特定数据库查询master.sys.syslogins,master.sys.databases,master.sys.configurations。有没有人必须删除这些公共角色的权利,这是否会导致任何问题?谢谢大家。
答案 0 :(得分:0)
不幸的是,这在使用数据库漏洞扫描工具时是一个常见的误报,遗憾的是没有绝对的答案。这将取决于您的特定情况&审核员,以确定这些调查结果是否确实是您需要改变的,或接受它作为操作风险。
在大多数情况下,我一直认为这些权限是可以接受的,特别是因为典型的最佳做法建议是不修改授予公共角色的默认权限。
在SQL Server上授予public的默认权限旨在制作工具& SQL Server中的某些功能可以正常工作,并且通常会有围绕这些权限的缓解因素。
在目录视图访问的特定情况下,它不仅受目录视图本身的选择权限的约束,还受元数据可见性规则的约束。有关详细信息,请访问BOL上的元数据可见性配置(https://msdn.microsoft.com/en-us/library/ms187113.aspx);我特别推荐阅读元数据可见性配置的"优点和限制"部分。
例如,对于具有sysadmin访问权限的用户,系统中的低权限用户对sys.server_principals
(不推荐master.sys.syslogins
)具有不同的可见性:
CREATE LOGIN [test00] WITH PASSWORD = '<s3cr3t P@zzw0Rd>';
ALTER LOGIN [test00] DISABLE;
CREATE LOGIN [test01] WITH PASSWORD = '<s3cr3t P@zzw0Rd>';
ALTER LOGIN [test01] DISABLE;
CREATE SERVER ROLE [srvrole00];
go
ALTER SERVER ROLE [srvrole00] ADD MEMBER [test00]
go
SELECT * FROM sys.server_principals -- Can see all server principals
EXECUTE ('SELECT * FROM sys.server_principals') AS LOGIN = 'test00' -- besides the system principals, can see only himself & the server role he is a member of
EXECUTE ('SELECT * FROM sys.server_principals') AS LOGIN = 'test01' -- besides the system principals, can see only himself
go
您会注意到结果是3个主体具有不同的元数据视图。
如果您的SQL审核员认为任何这些权限因任何原因而无法接受,您可以在他们认为必要的时候撤销该权限,但是这种行为可能会限制(或者在某些情况下完全破坏) )SQL服务器和/或工具的功能。我强烈建议查看他们试图阻止/阻止的操作,并采取相应的行动。
例如。对于访问数据库元数据,默认情况下会向public公布一个特殊权限:VIEW ANY DATABASE
。引入此权限是为了允许用户使用SSMS&amp;导航到不同数据库的类似工具。
撤销此权限将影响某些工具的工作方式,以便您可以在数据库之间切换,但它不会更改对数据库的访问权限;因此,如果您的用户不需要此类功能并且您希望阻止用户查看所有数据库元数据,那么这可能是一种可接受的权衡。
我希望这些信息有所帮助。请随时跟进任何问题。我很乐意帮忙。
-Raul
答案 1 :(得分:0)
我们的一般用户甚至都没有公开访问Master数据库,并且可能不应该在大多数环境中使用。只有DBA通常需要访问Master数据库。只要您只将Master数据库中的公共角色授予其中包含任何业务的登录...那么实际上没有必要从那里的任何对象中删除公共角色。如果删除对这些对象的公共角色访问权限,则只有系统管理员才能查询它们。