如何将对CREATE,ALTER,DROP语句的访问限制为SQL Server 2008中的特定用户/登录?
答案 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