C# sql server向用户授予、撤消权限

C# sql server向用户授予、撤消权限,c#,.net,sql-server,winforms,C#,.net,Sql Server,Winforms,我编写了一个简单的c代码,用于连接sql server数据库并执行查询: cmd = new SqlCommand(txtQuery.Text.ToString().Trim(), con); cmd.ExecuteNonQuery(); 在我的数据库中有一个名为myTB的表。我也有两个用户:user1owner,user2newusercreated 我用user2的用户名和密码登录到DB 我可以使用下面的查询来访问user1创建的表: 从user1.myTB

我编写了一个简单的c代码,用于连接sql server数据库并执行查询:

        cmd = new SqlCommand(txtQuery.Text.ToString().Trim(), con);
        cmd.ExecuteNonQuery();
在我的数据库中有一个名为myTB的表。我也有两个用户:user1owner,user2newusercreated

我用user2的用户名和密码登录到DB

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

从user1.myTB中选择*

我不知道为什么这个查询会出错:从myTB中选择*,现在就忘了它

现在我想撤销user2的“选择”权限。我的意思是我不希望user2对user1创建的myTB表执行select查询

我该怎么做是一个问题,我被困在它! 我使用了这个查询,但没有任何更改

Q1:从user2撤销对user1.myTB的选择

同样,用户2可以从user1.myTB中选择*!!!为什么

请帮我做这个。
谢谢。

用户2可能正在从角色成员身份获取其权限

运行:


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

调查并了解为什么user2有权选择 可能拒绝用户2的选择权限 权限的工作方式如下所示:

最初,用户拥有来自其组成员身份(包括公共角色)的权限 明确地授予特权 REVOKE收回以前授予的特权,恢复为具有从组成员身份隐式继承的特权的用户 否认否认特权 优先规则是任何拒绝优先于任何授予或继承的特权。一个人可以通过多次授予获得访问权,但一次拒绝将撤销该特权。您不能授予/撤销/拒绝对安全所有者的权限db_owner owner everything的成员和sysadmin的成员拥有整个服务器上的所有内容。

谢谢朋友们, 我已解决此问题,并使用DENY而不是REVOKE:


将user1.myTB上的select拒绝给user2

如果从myTB执行select*,则实际上是在告诉SQL Server myTB存在于默认架构dbo中,除非它已被更改。在本例中,尽管您没有明确声明,但myTB显然属于user1的模式,这就是为什么从user1.myTB中选择*有效的原因,因为您已经正确地指定了表的位置。一般来说,公认的良好做法是始终指定表所在的模式,除非您非常懒惰,并且将所有内容都保留在dbo中,这在很多情况下都是不受欢迎的。@StevePettifer谢谢:顺便说一句,我偶尔会把自己归入“超级懒散”一类——这句话的意思一般不是专门针对你或你的工作的!!:@史蒂夫佩蒂弗:没关系;但我的问题是!我不知道如何撤销用户的select权限!:这里没有人回答我!坦斯克。你说得对。但我现在该怎么办?我如何才能撤销表中的select权限,即使该表位于dbo中。为了公平起见,Remus Rusanu确实建议在第一个实例中使用DENY,因此他的答案应该是可接受的。
use [<YourDatabase>]
GO

exec sp_helpuser
exec sp_droprolemember 'db_datareader', 'user2'
GO