当增加某一类数据库的时候,我想实现该实例上已有登陆名对其自动有DB_OWNER的权限
我的想法是:
写一个实例级别的DDL 触发器,记录存放在MSDB 数据库中。
当有CREATE DATABASE 的类型的时候,自动判断新增加的库是否符合给予授权。如果符合,就
create user ... 
但是这样就产生一个问题,因为CREATE USER 以及sp_addrolemember 都只能在当前数据库 中运行,我想实现,在MSDB 数据库环境中,去给其它库增加一个用户:create user xxx for login yyy (而此时的XXX 用户是在其它数据库中生成 ,同样授DB_OWNER 也需要给到)

解决方案 »

  1.   

    写一个实例级别的DDL 触发器触发器是对表而言
      

  2.   

    --先
    USER 数据库--然后为登录 wh1 在当前数据库添加访问权限
    EXEC sp_grantdbaccess 'wh1','wh1'--给DB_OWNER
    EXEC sp_addrolemember 'DB_OWNER','wh1'
      

  3.   

    想到一个办法,可以在MODEL 数据库中添加数据库级别触发器,既然新建数据库,肯定要还需要下一步动作,才能进行下去,要不然新增空数据库就没意思了,所以当一旦触发数据库级别DDL 触发器的时候,就可以实现对当前数据库添加用户并授权了。
    /****** 对象:  DdlTrigger [trgMsdbDatabaseon]    脚本日期: 10/20/2009 11:53:55 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    create trigger 
    [trgMsdbDatabaseon] on database for 
    ddl_database_level_events 
    as  
    DECLARE @hostname NVARCHAR(100); 
    DECLARE @cmd NVARCHAR(max);  
    declare @eventData as XML; 
    set @hostname = HOST_NAME(); 
    set @eventData = eventdata();
    SET @cmd=convert(nvarchar(max),@eventData.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','NVARCHAR(1000)')) 
    SET @cmd=LTRIM(RTRIM(REPLACE(@cmd,'',''))) 
    if exists(select * from msdb.sys.objects where name=N'M_TrgDDL' and type_desc=N'USER_TABLE')
    insert into msdb.dbo.M_TrgDDL 
    ( postTime, eventType, loginName,hostname, objectName, databaseName, eventData,cmd,auditType) 
    values( cast(@eventData.query('data(//PostTime)') as varchar(23)),  
    cast(@eventData.query('data(//EventType)') as varchar(128)),  
    cast(@eventData.query('data(//LoginName)') as varchar(128)),  
    @hostname,cast(@eventData.query('data(//ObjectName)') as varchar(128)), 
    DB_NAME(),@eventData,@cmd, 0);if cast(varchar(10),db_name())='mydb'
    begin 
    create user aaa for login bbb
    EXEC sp_addrolemember 'DB_OWNER','aaa'
    end GO
    SET ANSI_NULLS OFF
    GO
    SET QUOTED_IDENTIFIER OFF
    GO
    ENABLE TRIGGER [trgMsdbDatabaseon] ON DATABASE
      

  4.   

    create user aaa for login bbb
    修改为
    EXEC sp_grantdbaccess 'aaa','aaa'