-2

如何将 CREATE、ALTER、DROP 语句的访问权限限制为 SQL Server 2008 中的特定用户/登录名?

4

2 回答 2

0

您可以使用此触发器,如果​​您只想使用 1 个数据库,请使用注释代码 @event 数据并编写您的逻辑

 CREATE TRIGGER [permissions]
    ON ALL SERVER
    FOR CREATE_Table,DROP_Table,ALTER_Table,
        CREATE_View,ALTER_View,Drop_View,
        CREATE_Trigger,ALTER_Trigger,Drop_Trigger,
        CREATE_DATABASE,DROP_DATABASE,ALTER_DATABASE,
        CREATE_USER,DROP_USER,ALTER_USER,
        CREATE_FUNCTION,ALTER_FUNCTION,DROP_FUNCTION,
        CREATE_Procedure,ALTER_Procedure,DROP_Procedure,
        CREATE_ASSEMBLY,ALTER_ASSEMBLY,DROP_ASSEMBLY,
        CREATE_ROLE,ALTER_ROLE,DROP_ROLE

AS

BEGIN   



 --   DECLARE @Eventdata XML,@ActionType varchar(100),@DataBase varchar(100)
    --SET @Eventdata = EVENTDATA()
        --SET @ActionType=@Eventdata.value('(/EVENT_INSTANCE/EventType)[1]',    'nvarchar(100)')
 --   SET @DataBase=@Eventdata.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'nvarchar(100)')

   IF  SYSTEM_USER  IN ('user')
                BEGIN 
                RAISERROR ('not allowed.', 16, 1 );
                ROLLBACK;   
    END




  END         
于 2012-09-25T23:35:43.177 回答
0

SQL 权限层次结构从实例级别的登录开始,然后是数据库级别的用户,它们映射到实例的登录。

除非您通过服务器角色和数据库角色(这些是简化权限管理的原则和安全对象的集合)或通过直接授予对象权限,否则用户及其关联的登录名将没有任何权限。

在 SQL Server 中,DENY 会覆盖 GRANT,因此如果您的用户已经处于授予他们针对相关对象发出 DDL 权限的角色中,那么您可以拒绝他们对相关特定对象的权限。基于拒绝更改表权限的语法示例如下:

DENY ALTER ON OBJECT::dbo.MyTable TO MyUser

当然,您也可以通过 GUI 来实现这一点。在 SSMS 中,钻取 Databases>MyDatabase>Security>Users,然后打开相关用户的属性并在此处更改其分配。

数据库世界中的安全性非常重要,我强烈建议您调查使用 Windows 组服务器角色和数据库角色来管理您的权限,而不是以临时方式设置权限。我还推荐一份完整记录的安全政策和例外文件,其中详细说明了您组织中的精确安全结构。保留这些工作文档将使您能够轻松跟踪谁可以做什么。这有助于避免不可否认性问题并使审计变得容易。

我希望这有帮助。

于 2012-09-25T06:37:34.760 回答