码迷,mamicode.com
首页 > 其他好文 > 详细

DDL触发器抓取赋权操作

时间:2016-05-04 22:35:25      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

近期在对接中,业务(数据挖掘同事)需要将部分账号控制到表级别,只允许部分账号访问指定的表.

而这些人员是不确定的,并且变动将较为频繁.
与对接同事沟通后采用如下方案实现:
给此同事开通此数据库的db_securityadmin角色账号,此账号可以在库级别范围内给其他用户赋予表级别权限.
新建一个数据库,并在其中新增一张记录相应操作的日志表.
赋予此账户写入log表操作(grant insert)其余权限无
新建库级别的DDL触发器,通过此触发器获取相应的权限操作变动记录(grant,deny,revoke)
详细步骤及SQL代码如下:
技术分享
Create Database [TriggerLog];
GO
USE [TriggerLog];
GO
CREATE TABLE [dbo].[Authority_log](
    [id] [bigint] IDENTITY(1,1) NOT NULL,
    [PostTime] [datetime] NOT NULL DEFAULT (getdate()),
    [DB_User] [nvarchar](200) NOT NULL DEFAULT (‘‘),
    [DBNAME] [nvarchar](50) NOT NULL DEFAULT (‘‘),
    [EventType] [nvarchar](100) NOT NULL DEFAULT (‘‘),
    [TSQLCommand] [nvarchar](max) NOT NULL DEFAULT (‘‘),
 CONSTRAINT [PK_Authority_log] PRIMARY KEY CLUSTERED ([id] ASC)
) ON [PRIMARY] 
GO
建库&建表
技术分享
--赋予账号记录日志权限***必要,否则触发器无法正常运行,赋予权限操作也无法执行***

USE [TriggerLog]
GO
CREATE USER [test] FOR LOGIN [test]            --新建登陆账号在日志库中对应的用户
GO
GRANT INSERT ON [dbo].[Authority_log] TO [test]    --赋予用户插入日志表数据的权限
GO
赋予账号记录日志权限
技术分享
--在所需开通赋权的库上新建DDL触发器

USE [testdb]        --如有多个库,每个库上都部署一个即可
GO

IF EXISTS(SELECT * FROM sys.triggers WHERE name = NTr_Train_Authority_Monitor AND parent_class_desc = NDATABASE )
    DROP TRIGGER Tr_Train_Authority_Monitor ON DATABASE
GO

CREATE TRIGGER Tr_Train_Authority_Monitor ON DATABASE
    FOR GRANT_DATABASE,DENY_DATABASE,REVOKE_DATABASE
AS 
   DECLARE @data XML
    SET @data = EVENTDATA()
    INSERT TriggerLog.dbo.[Authority_log] (PostTime, DB_User,DBNAME, EventType, TSQLCommand) VALUES 
       (GETDATE(), CONVERT(nvarchar(100), CURRENT_USER), DB_NAME(),
       @data.value((/EVENT_INSTANCE/EventType)[1], nvarchar(100)), 
       @data.value((/EVENT_INSTANCE/TSQLCommand)[1], nvarchar(2000)) ) ;
GO
新建DDL触发器
技术分享
--在所需开通赋权的库上新建登陆和赋予db_securityadmin角色

USE [testdb]        --如有多个库,每个库上都部署一个即可
GO

CREATE USER [test] FOR LOGIN [test]
GO

ALTER ROLE [db_securityadmin] ADD MEMBER [test]
GO
新建登陆和赋予db_securityadmin角色
 
 至此,相关权限开通和监控已经部署完毕.测试结果:
技术分享

DDL触发器抓取赋权操作

标签:

原文地址:http://www.cnblogs.com/qkiori/p/5459946.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!