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