SQL server授予、撤销用户权限

本文关键字:用户 权限 server 授予 SQL | 更新日期: 2023-09-27 18:01:27

我写了一个简单的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",忘记它现在!)

  • 现在我想REVOKE 'select'权限从user2。我的意思是我不希望user2在user1创建的myTB表上执行select查询

  • 我该怎么做是一个问题,我被卡住了!我使用了这个查询,但是没有任何改变!

Q1: "Revoke select ON user1. "myTB FROM user2"

user2可以执行select * from user1。myTB ! !为什么! ?

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

SQL server授予、撤销用户权限

user2可能从角色成员中获得权限。

运行:

use [<YourDatabase>]
GO
exec sp_helpuser

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

如果是,您可以撤销成员关系,例如db_datareader,执行以下操作:

exec sp_droprolemember 'db_datareader', 'user2'
GO

你不能撤销你没有授予的东西。看起来你想要:

  1. 调查和理解为什么 user2有SELECT权限
  2. 可能拒绝user2的SELECT权限

权限的工作方式如下:

  • 初始用户拥有来自其组成员身份(包括公共角色)的权限
  • GRANT显式授予权限
  • REVOKE收回先前授予的权限,恢复到具有从组成员
  • 隐式继承的权限的用户。
  • DENY拒绝特权

优先级规则是任何DENY优先于任何GRANT或继承特权。一个人可以通过多个grant获得访问权限,但是一个DENY将撤销特权。你不能授予/REVOKE/DENY权限给安全所有者(db_owner的成员拥有所有sysadmin的成员拥有所有在整个服务器)。

谢谢各位朋友!我已经解决了这个问题,并使用DENY代替REVOKE:

DENY select ON user1。