sql server grant,撤销对用户的权限

我写了一个简单的c#代码连接到sql-server数据库并执行查询:

cmd = new SqlCommand(txtQuery.Text.ToString().Trim(), con); cmd.ExecuteNonQuery(); 
  • 在我的数据库中,我有一个名为myTB的表。 我也有两个用户:user1(所有者),user2(创建新用户)

  • 我用user2的用户名和密码登录 (连接到DB)!

  • 我可以使用以下查询访问user1创建的表:

    “select * from user1.myTB”

    (我不知道为什么我的查询出错:“select * from myTB”,现在就忘了!)

  • 现在我想撤消来自user2的’select’权限。 我的意思是我不希望user2在user1创建的myTB表上执行select查询

  • 我该怎么办才是我遇到的问题! 我用过这个查询,但没有改变!

Q1:“撤消选择ON user1.myTB FROM user2”

再次user2可以从user1.myTB中选择*! 为什么!?

请帮我解决一下这个。 谢谢。

user2可能从角色成员身份获得它的权限。

跑:

 use [] GO exec sp_helpuser 

在第一列中找到用户,然后查看第二列。 用户是db_datareader还是db_owner的成员?

如果是这样,您可以通过执行以下操作来撤消成员资格,例如db_datareader。

 exec sp_droprolemember 'db_datareader', 'user2' GO 

你不能撤消你没有获得的东西。 看起来你想:

  1. 调查并理解user2有权选择SELECT的原因
  2. 可能拒绝SELECT到user2权限

许可工作如下:

  • 最初,用户具有源自其团队网络(包括公共角色)的权限
  • GRANT明确授予特权
  • REVOKE收回之前授予的权限,恢复为具有从群组成员inheritance的特权的用户
  • 拒绝否认特权

优先规则是任何DENY优先于任何GRANT或inheritance权限。 可以通过一些GRANT访问,但是一个DENY将撤销该权限。 您无法对安全所有者授予/拒绝/拒绝权限( db_owner的成员拥有所有内容 ,而sysadmin的成员拥有整个服务器上的所有内容)。

谢谢朋友们,我已经解决了它并使用了DENY而不是REVOKE:

DENY选择ON user1.myTB TO user2