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 ! !为什么! ?
请帮我解决这个问题。谢谢。user2可能从角色成员中获得权限。
运行:use [<YourDatabase>]
GO
exec sp_helpuser
查找第一列中的用户,然后查看第二列。用户是db_datareader
还是db_owner
的成员?
如果是,您可以撤销成员关系,例如db_datareader,执行以下操作:
exec sp_droprolemember 'db_datareader', 'user2'
GO
你不能撤销你没有授予的东西。看起来你想要:
- 调查和理解为什么
user2
有SELECT权限 - 可能拒绝
user2
的SELECT权限
权限的工作方式如下:
- 初始用户拥有来自其组成员身份(包括公共角色)的权限
- GRANT显式授予权限
- REVOKE收回先前授予的权限,恢复到具有从组成员 隐式继承的权限的用户。
- DENY拒绝特权
优先级规则是任何DENY优先于任何GRANT或继承特权。一个人可以通过多个grant获得访问权限,但是一个DENY将撤销特权。你不能授予/REVOKE/DENY权限给安全所有者(db_owner
的成员拥有所有, sysadmin
的成员拥有所有在整个服务器)。
谢谢各位朋友!我已经解决了这个问题,并使用DENY代替REVOKE:
DENY select ON user1。