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

时间:2013-02-27 12:48:06

标签: c# .net sql-server winforms

我编写了一个简单的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中选择*!为什么!?

请帮我解决这个问题。 感谢。

3 个答案:

答案 0 :(得分:1)

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

执行命令

use [<YourDatabase>]
GO

exec sp_helpuser

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

的成员

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

exec sp_droprolemember 'db_datareader', 'user2'
GO

答案 1 :(得分:1)

你无法撤消你没有获得的东西。看起来你想要:

  1. 调查并了解 user2有权选择
  2. 的原因
  3. 可能拒绝SELECT到user2
  4. 许可工作如下:

    • 最初,用户拥有源自其团体网络(包括公共角色)的权限
    • GRANT明确授予特权
    • REVOKE收回之前授予的权限,还原为具有从群组成员身上继承的权限的用户
    • DENY否认特权

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

答案 2 :(得分:0)

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

DENY 选择ON user1.myTB TO user2