我编写了一个简单的c#代码,它连接到sql-server数据库并执行查询:
cmd = new SqlCommand(txtQuery.Text.ToString().Trim(), con);
cmd.ExecuteNonQuery();
在我的数据库中我有一个名为myTB的表。我也有两个用户:user1(所有者),user2(新用户创建)
我使用 user2 的用户名和密码登录(连接到数据库)!
我可以使用以下查询访问user1创建的表:
“select * from user1.myTB”
(我不知道为什么我的查询会出错:“select * from myTB”,现在就忘了!)
现在我想 REVOKE 'select'来自user2的权限。我的意思是我不希望user2在user1创建的myTB表上执行选择查询。
我该怎么做才是我遇到的问题! 我使用了这个查询,但没有改变!
Q1:“撤消选择ON user1.myTB FROM user2”
再次user2可以从user1.myTB中选择*!为什么!?
请帮我解决这个问题。 感谢。
答案 0 :(得分:1)
user2可能从角色成员身份获得了权限。
执行命令
use [<YourDatabase>]
GO
exec sp_helpuser
在第一列中找到用户,然后查看第二列。该用户是db_datareader
还是db_owner
?
如果是这样,您可以通过执行以下操作来撤销成员资格,例如db_datareader:
exec sp_droprolemember 'db_datareader', 'user2'
GO
答案 1 :(得分:1)
你无法撤消你没有获得的东西。看起来你想要:
user2
有权选择user2
许可工作如下:
优先规则是任何DENY优先于任何GRANT或继承权限。可以通过一些GRANT访问,但一个DENY将撤销该权限。您无法对安全所有者(db_owner
拥有一切的成员以及sysadmin
成员拥有所有在整个服务器上授予/拒绝/拒绝权限)。
答案 2 :(得分:0)
谢谢朋友们, 我已经解决了它并使用DENY而不是REVOKE:
DENY 选择ON user1.myTB TO user2