您的位置:首页 > 数据库

如何禁止普通用户使用企业管理器列出服务器上的数据库列表

2007-08-15 16:41 706 查看
如何禁止普通用户使用企业管理器列出服务器上的数据库列表

在建立一个低权限数据库用户的时候,往往只希望他可以拥有对特定数据库的访问权限,对于特定数据库之外的信息,是知道的越少越好。首先,假设有一个低权限用户A、

然而在MSSQL的企业管理器中,即使使用用户A注册一个服务器之后,仍然可以看到所有的数据库列表。有些情况下,这不是一个好事情。然而使用A登陆到查询分析器之后,却只能看到指定的数据库列表,还有系统数据库,这是为什么呢?

我们首先分析企业管理器和查询分析器获取数据库列表的区别,然后再告诉大家如何禁止用户A看到数据库列表。

使用MSSQL自带的事件查探器进行分析可以知道,企业管理器使用如下语句获取数据库列表:
select name, DATABASEPROPERTY(name, N'IsDetached'), (case when DATABASEPROPERTY(name, N'IsShutdown') is null then -1 else DATABASEPROPERTY(name, N'IsShutdown') end), DATABASEPROPERTY(name, N'IsSuspect'), DATABASEPROPERTY(name, N'IsOffline'), DATABASEPROPERTY(name, N'IsInLoad'), (case when DATABASEPROPERTY(name, N'IsInRecovery') is null then -1 else DATABASEPROPERTY(name, N'IsInRecovery') end), (case when DATABASEPROPERTY(name, N'IsNotRecovered') is null then -1 else DATABASEPROPERTY(name, N'IsNotRecovered') end), DATABASEPROPERTY(name, N'IsEmergencyMode'), DATABASEPROPERTY(name, N'IsInStandBy'), has_dbaccess(name), status, category, status2 from master.dbo.sysdatabases

而查询分析器则使用如下语句获取数据库列表(执行一个存储过程)
dbo.sp_MShasdbaccess

这就是原因之所在了

在默认情况下,数据库用户对系统数据库是拥有权限的,可以从系统数据库查询信息,所以,企业管理器通过查询master数据库来获取数据库列表的方式并不受用户所能访问的数据库的限制。

而查询分析器执行的存储过程是经过权限限定后的数据库列表。

那如果要禁止用户查看他没有权限访问的数据库名称,只有,,,,禁止他查询master.dbo.sysdatabases了

好了,目标已经明确,相信大家已经知道怎么做了
把用户加入到master数据库的用户中去
然后指派sysdatabases表的访问权限
把A用户的select权限去掉

好了,这时候,用户A如果再使用企业管理器,什么数据库也看不到了
只能使用查询分析器进行操作了
虽然有些严厉,但也是一种解决方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: