如何将 CREATE、ALTER、DROP 语句的访问权限限制为 SQL Server 2008 中的特定用户/登录名?
问问题
1241 次
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 回答