如何限制特定用户的访问或在sql server中登录

时间:2012-09-25 04:59:48

标签: sql sql-server sql-server-2008

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

2 个答案:

答案 0 :(得分:0)

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

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

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

DENY ALTER ON OBJECT::dbo.MyTable TO MyUser

虽然您当然可以通过GUI进行此操作。在SSMS中,钻取数据库> MyDatabase>安全>用户然后打开相关用户的属性并在此处更改其分配。

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

我希望这会有所帮助。

答案 1 :(得分: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