当增加某一类数据库的时候,我想实现该实例上已有登陆名对其自动有DB_OWNER的权限
我的想法是:
写一个实例级别的DDL 触发器,记录存放在MSDB 数据库中。
当有CREATE DATABASE 的类型的时候,自动判断新增加的库是否符合给予授权。如果符合,就
create user ...
但是这样就产生一个问题,因为CREATE USER 以及sp_addrolemember 都只能在当前数据库 中运行,我想实现,在MSDB 数据库环境中,去给其它库增加一个用户:create user xxx for login yyy (而此时的XXX 用户是在其它数据库中生成 ,同样授DB_OWNER 也需要给到)
我的想法是:
写一个实例级别的DDL 触发器,记录存放在MSDB 数据库中。
当有CREATE DATABASE 的类型的时候,自动判断新增加的库是否符合给予授权。如果符合,就
create user ...
但是这样就产生一个问题,因为CREATE USER 以及sp_addrolemember 都只能在当前数据库 中运行,我想实现,在MSDB 数据库环境中,去给其它库增加一个用户:create user xxx for login yyy (而此时的XXX 用户是在其它数据库中生成 ,同样授DB_OWNER 也需要给到)
解决方案 »
- sql server 里面的包含怎么写?
- 请问存储过程怎么查询前@n条数据(select top @n * from……报错
- 一个查询的问题比较费解的问题?
- 在2000中能否通过查询INFORMATION_SCHEMA.TABLES判断表的存在?
- 操作异常终止
- 求教:update HD_Phy_Exch set EA9=(EA8/EA5)*100 where ExchAID=10 怎么更新不了EA9呢?
- WM6上的SQLCE数据库,有支持批处理执行SQL语句的方法嘛?
- 分页,排序,索引问题
- 救急啊,有关SQLServer安装配置问题!在线等啊
- 数据库设计问题?
- sql2000中用sql语句给新建用户查询某一数据库全部表的权限怎么做?
- 求一sql
USER 数据库--然后为登录 wh1 在当前数据库添加访问权限
EXEC sp_grantdbaccess 'wh1','wh1'--给DB_OWNER
EXEC sp_addrolemember 'DB_OWNER','wh1'
/****** 对象: 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
修改为
EXEC sp_grantdbaccess 'aaa','aaa'