好贷网好贷款

【DDL触发器】用DDL触发器记录权限变更 的两个问题 40soufun91]

发布时间:2016-12-3 21:50:28 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"【DDL触发器】用DDL触发器记录权限变更 的两个问题 40soufun91]",主要涉及到【DDL触发器】用DDL触发器记录权限变更 的两个问题 40soufun91]方面的内容,对于【DDL触发器】用DDL触发器记录权限变更 的两个问题 40soufun91]感兴趣的同学可以参考一下。

CREATE TRIGGER dtr_dba_DB ON DATABASE  FOR DDL_DATABASE_LEVEL_EVENTS  问题1: 对于创建表一级的DDL触发器 能否只在服务器上定义一次( ON ALL SERVER) 而不需要到每个库里增加这个触发器 问题2: 在每个库里定义的触发器 如何保证能对记录表数据有写入权限 ,WITH EXECUTE AS ‘sa' 需要将每个数据库里映射SA用户,太绕了

不可以 服務器範圍以針對以下事件可以觸發 使用伺服器範圍的 DDL 陳述式 ALTER_AUTHORIZATION_SERVER     CREATE_DATABASE  ALTER_DATABASE  DROP_DATABASE   CREATE_ENDPOINT  DROP_ENDPOINT    CREATE_LOGIN  ALTER_LOGIN  DROP_LOGIN   GRANT_SERVER  DENY_SERVER  REVOKE_SERVER  

问题2: 在每个库里定义的触发器 如何保证能对记录表数据有写入权限 ,WITH EXECUTE AS ‘sa' 需要将每个数据库里映射SA用户,太绕了 不需要映射,SA的權限有服務器角色 --sysadmin

1、服务器范围内的DDL触发器作为对象存储在master数据库中

问题1: 对于创建表一级的DDL触发器 能否只在服务器上定义一次( ON ALL SERVER) 而不需要到每个库里增加这个触发器 这个实现不了,DDL触发器是数据库对象,属于数据库,做不到在整个服务器 问题2: 在每个库里定义的触发器 如何保证能对记录表数据有写入权限 ,WITH EXECUTE AS ‘sa' 需要将每个数据库里映射SA用户,太绕了 可以把这个记录表的insert权限给所有用户,控制update、delete权限。

2、把权限给指定的用户

数据库范围内的 DDL 触发器都作为对象存储在创建它们的数据库中。可以在 master 数据库中创建 DDL 触发器,这些触发器的行为与在用户设计的数据库中创建的 DDL 触发器的行为类似。

CREATE TRIGGER tr_db ON DATABASE  WITH EXECUTE AS 'sa' FOR DDL_DATABASE_LEVEL_EVENTS   AS   .... --返回: 消息 15151,级别 16,状态 1,过程 tr_db,第 20 行 --无法对 用户 'sa' 执行 执行身份,因为它不存在,或者您没有所需的权限。 CREATE TRIGGER tr_srv ON ALL SERVER WITH EXECUTE AS 'sa' --这样是可以的 求解。。。

引用 7 楼 soufun91 的回复:SQL code CREATE TRIGGER tr_db ON DATABASE  WITH EXECUTE AS 'sa' FOR DDL_DATABASE_LEVEL_EVENTS   AS   .... --返回: 消息 15151,级别 16,状态 1,过程 tr_db,第 20 行 --无法对 用户 'sa' 执行 执行身份,因为它不存在,或者您没有所需的权限。 CRE…… WITH EXECUTE AS 'dbo' 是這個,所有者

在安全性—sa賬號—映射對應的DB的數據庫用戶可以看到

sa--登陸用戶 dbo--數據用戶 All Server--是針對登陸 database --是針對數據庫

OK,问题解决了  

上一篇:ramdisk 数据库问题 100xuxinen]
下一篇:BBS论坛它提供了什么功能? 40zhaxin123]

相关文章

相关评论