我需要限制对特定用户的访问,但是他们仍然需要能够查看dbo拥有的表中的数据。
我正在尝试执行以下操作:
- dbo模式具有正常功能,可以访问所有内容
- schema1模式只能访问schema1对象
- 如果schema1视图或存储过程访问dbo拥有的表中的数据,则权限链会适当
- user1有权访问schema1,除此之外没有其他权限;#3除外
这是我尝试过的:
- 创建一个使用随机密码映射到测试登录名的user1用户
- 在dbo模式中创建了几个表,其中包含一些测试数据
- 创建一个schema1模式
- 创建一个schema1.get_profiles,该视图从一个名为schema1.profiles的视图中进行选择,该视图访问dbo.people,dbo.taglinks和dbo.tags中的数据
但是,以user1身份登录时使用以下语句:
EXEC get_profiles 1
结果是:
The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'.
我已经尝试过WITH EXECUTE AS OWNER
并且无法开始理解“所有权链接”应该如何工作。
我也尝试过
GRANT EXECUTE ON SCHEMA::schema1 TO user1
GRANT INSERT ON SCHEMA::schema1 TO user1
GRANT SELECT ON SCHEMA::schema1 TO user1
GRANT UPDATE ON SCHEMA::schema1 TO user1
GRANT VIEW DEFINITION ON SCHEMA::schema1 TO user1
但出现以下错误(尽管是具有dbo级访问权限的用户):
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
我需要的是user1能够通过我给它的存储过程访问数据,而没有别的。
此外,它最终旨在存在于现有的SQL Azure数据库上,但是我首先要针对本地虚拟数据库进行测试。
请参阅我的回答:如何对用户隐藏架构让我知道是否需要更多说明。
—
Kin Shah 2013年
这似乎让我更清楚了。我认为问题是我将Schema1的所有者设置为User1,而不是dbo。我将Schema1设置为User1所拥有,对其进行了调整并遵循了该问题,并且能够使某些工作正常进行。如果需要,您可以提出问题的答案。谢谢!
—
朱莉娅·麦奎根
很高兴它对您有所帮助。
—
Kin Shah