如何禁止普通用户使用企业管理器列出服务器上的数据库列表
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如果再使用企业管理器,什么数据库也看不到了
只能使用查询分析器进行操作了
虽然有些严厉,但也是一种解决方法
在建立一个低权限数据库用户的时候,往往只希望他可以拥有对特定数据库的访问权限,对于特定数据库之外的信息,是知道的越少越好。首先,假设有一个低权限用户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如果再使用企业管理器,什么数据库也看不到了
只能使用查询分析器进行操作了
虽然有些严厉,但也是一种解决方法
相关文章推荐
- 我的服务器开发之路-禁止root登录和普通用户获取root权限
- 服务器推,删除在线用户列表,使用beforeunload和异步提交删除
- 如何设置Apache禁止访问目录(列出目录/文件列表)
- 如何:使用 AdRotator Web 服务器控件显示数据库中的广告
- linux下普通用户如何使用80端口启动程序
- 检查crontab合规,除root用户外,禁止普通用户使用crontab
- 如何使用sudo来允许普通用户使用超级用户权限
- 如何使用PLSQL添加用户和密码,登录时可以免输入密码 PLSQL配置新数据库连接
- 如何:使用 SQL Server 数据库项目或服务器项目进行调试
- 如何断开数据库中正在使用的所有用户
- 禁止普通用户使用su
- 如何查看哪些进程和服务器正在使用数据库
- 禁止用户使用密码的方式登录服务器,让其使用key的方式登录
- SVN服务器部署并实现双机同步及禁止普通用户删除文件
- shell: 普通用户如何以root权限执行远程服务器上的命令_20160706_七侠镇莫尛貝
- 如何调用SQL-DMO读取SQL Server服务器列表及指定服务器的数据库列表
- SVN服务器部署并实现双机同步及禁止普通用户删除文件
- 如何禁止特定用户使用sqlplus或PL/SQL Developer等工具登陆?
- SVN服务器部署并实现双机同步及禁止普通用户删除文件
- linux 禁止普通用户使用su切换到root用户和禁止 root ssh登陆