代码之家  ›  专栏  ›  技术社区  ›  chris

在SQL Server 2008中编写高级安全属性脚本?

  •  0
  • chris  · 技术社区  · 14 年前

    在SQLServer2008下,可以将给定用户的权限设置为表和/或字段级别。

    1 回复  |  直到 14 年前
        1
  •  1
  •   8kb    14 年前

    是的,您可以使用 GRANT

    如果要使用SSMS编写信息脚本,请在Securables中分配权限,然后单击 Script 屏幕顶部的按钮。

    alt text http://img337.imageshack.us/img337/7236/scriptperm.png

    USE master
    GO
    
    /* Create test database */
    CREATE DATABASE StackO
    GO
    
    USE StackO
    GO
    
    /* Create a table */
    CREATE TABLE TestSelect (
      RowID INT NOT NULL,
      RowValue VARCHAR(1) NOT NULL,
      RowProperty VARCHAR(1) NOT NULL
    ) 
    
    /* Populate with data */
    INSERT TestSelect VALUES (1,'A','X'),(2,'A','Y')
    
    /* Create a user */
    CREATE USER SO_User WITHOUT LOGIN
    
    /* Grant the user SELECT permissions on RowID and RowValue */
    GRANT SELECT ON TestSelect (RowID) TO SO_User
    GO
    
    GRANT SELECT ON TestSelect (RowValue) TO SO_User
    GO
    
    /* Deny user SELECT permissions on RowProperty */
    DENY SELECT ON TestSelect (RowProperty) TO SO_User
    GO
    
    /* Test the permissions */
    EXECUTE AS USER = 'SO_User'
    GO
    
    /* Confirm select on RowID and RowValue */
    SELECT RowID, RowValue FROM TestSelect
    GO
    
    /* Confirm error message on RowProperty */
    SELECT RowProperty FROM TestSelect
    GO
    
    /* Go back to regular user */
    REVERT
    GO
    
    /* Cleanup */
    USE master
    GO
    
    DROP DATABASE StackO
    GO
    

    RowID       RowValue
    ----------- --------
    1           A
    2           A
    
    Msg 230, Level 14, State 1, Line 3
    The SELECT permission was denied on the column 'RowProperty' 
    of the object 'TestSelect", database 'SO', schema 'dbo'.