Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在sql server中限制特定用户或登录名的访问_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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

如何在sql server中限制特定用户或登录名的访问,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,如何在SQL Server 2008中将CREATE、ALTER、DROP语句的访问权限限制为特定用户/登录名?SQL权限层次结构从实例级别的登录名开始,然后是数据库级别的用户,这些登录名映射到实例的登录名 除非您通过服务器角色和数据库角色(这些是简化权限管理的原则和安全性集合)或直接授予对象权限,否则用户及其关联的登录名将不具有任何权限 在SQL Server中,DENY会覆盖GRANT,因此,如果您的用户已经处于授予他们对相关对象发出DDL权限的角色中,那么您可以拒绝他们对相关特定对象的权限

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

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

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

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

DENY ALTER ON OBJECT::dbo.MyTable TO MyUser
当然,您也可以通过GUI来实现这一点。在SSMS中,钻取数据库>MyDatabase>安全>用户,然后打开相关用户的属性并在此处更改其分配

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


我希望这会有所帮助。

如果只需要1个数据库,可以使用此触发器,使用注释代码@event data并编写逻辑

 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         

这是一个更好的地方看