开发者社区> 问答> 正文

SQL Server:对象权限

我们能否撤消对SQL Server数据库上所有对象的所有特权,并仅授予对特定架构的几个表的访问权限

展开
收起
祖安文状元 2020-01-03 16:11:28 498 0
1 条回答
写回答
取消 提交回答
  • 默认情况下,用户除具有权限外没有其他权限public ROLE。因此,如果您没有授予他们任何权限,则只需要给他们正确的权限即可。

    如果您的意思是已经创建并赋予了USER很多个人权限,则可能会更快一些DROP,USER并使用正确的权限重新创建它:

    USE Sandbox;
    GO
    
    CREATE USER TestUser WITHOUT LOGIN WITH SID = 0x0105000000000009030000003A1272CDF6378A479D2C1EC4E229CB56;
    GO
    
    CREATE TABLE dbo.TestTable1 (ID int);
    
    CREATE TABLE dbo.TestTable2 (ID int);
    GO
    
    GRANT INSERT, SELECT, UPDATE, DELETE ON dbo.TestTable1 TO TestUser;
    GRANT INSERT, SELECT, UPDATE, DELETE ON dbo.TestTable2 TO TestUser;
    GO
    
    EXECUTE AS USER = N'TestUser';
    GO
    
    INSERT INTO dbo.TestTable1 (ID)
    VALUES(1);
    
    INSERT INTO dbo.TestTable2 (ID)
    VALUES(11);
    GO
    
    SELECT *
    FROM dbo.TestTable1;
    SELECT *
    FROM dbo.TestTable2;
    GO
    
    REVERT
    GO
    
    DROP USER TestUser;
    GO
    CREATE USER TestUser WITHOUT LOGIN WITH SID = 0x0105000000000009030000003A1272CDF6378A479D2C1EC4E229CB56;
    
    GRANT INSERT, SELECT, UPDATE, DELETE ON dbo.TestTable2 TO TestUser;
    GO
    
    EXECUTE AS USER = N'TestUser';
    GO
    --Fails
    INSERT INTO dbo.TestTable1 (ID)
    VALUES(2);
    GO
    --Succeeds
    INSERT INTO dbo.TestTable2 (ID)
    VALUES(12);
    GO
    --Fails
    SELECT *
    FROM dbo.TestTable1;
    GO
    --Succeeds
    SELECT *
    FROM dbo.TestTable2;
    GO
    
    REVERT
    GO
    
    GO
    
    --Clean up
    DROP USER TestUser;
    DROP TABLE dbo.TestTable1;
    DROP TABLE dbo.TestTable2;
    
    

    如果这是您经常执行的操作,听起来您应该拥有角色,并且应该从特定角色中添加/删除用户。

    2020-01-03 16:11:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载