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