【发布时间】:2012-04-06 11:08:45
【问题描述】:
我的公司聘请了一名承包商为我们做一个小项目,他需要从我们主数据库 (SQL Server 2005) 的一个视图中选择数据。
我想为他创建一个锁定的SQL Server 登录名,仅从“他的”视图中获得SELECT 的权限......而没有别的。
所以我在服务器上创建了一个新用户,然后我只给了他一个视图的权限:
grant select on SpecialView to SpecialUser;
基本上,这是可行的——他看不到我们的任何表和存储过程,也看不到任何视图,除了“他的”视图。
但是:
- 他可以访问所有系统视图
- 他可以访问所有系统存储过程。
显然他的权限被自动锁定(sys.objects 只显示他有权限的对象,sp_who 只显示他自己的进程等等)。
所以,我的问题是:
是否可以在不访问系统视图和存储过程的情况下创建用户?
(如果可以,我做错了什么?)
或者有什么原因导致即使锁定的用户也需要访问系统视图和存储过程?
编辑:
kevchadders,用户无权访问 master、model 或 msdb - 只能访问具有他应该看到的视图的数据库。
但是,要明确一点:用户可以看到的系统视图/进程在“他的”视图所在的数据库中......不在主数据库中。
所以我不能禁用他的所有访问权限,因为他需要从同一个数据库中的一个视图中进行选择。
关键是,即使我明确地为他应该看到的单个视图设置了权限,为什么他仍然可以看到系统视图/procs?
【问题讨论】:
标签: sql-server sql-server-2005 security database-permissions