经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库运维 » MS SQL Server » 查看文章
SQL Server基础之登陆触发器
来源:cnblogs  作者:刀奈特程序员  时间:2018/10/8 9:02:57  对本文有异议

  虽然同表级(DML)触发器和库级(DDL)触发器共顶着一个帽子,但登陆触发器与二者有本质区别。无论表级还是库级,都是用来进行数据管理的,而登陆触发器是纯粹的安全工具。

  登陆触发器只响应LOGON事件,在登陆数据库成功后、用户会话未实际建立前触发。登陆数据库失败,如账号密码错误,不会激发登陆触发器。登陆触发器内部的错误消息及PRINTSQL语句输出信息,统一写到SQL Server 错误日志。登陆触发器可以同时存在多个,但存在多个时,SQL Server不保证所有触发器的执行顺序,只能使用sp_settriggerorder 确定哪一个登陆触发器第一个或最后一个执行。登陆触发器内部执行rollback语句或者发生级别大于20的错误,将会阻止用户继续登陆。

  前面说到登陆触发器是纯粹的安全工具,作为安全工具,登陆触发器使用场景都是与安全有关的。下面列举了登陆触发器使用的4种场景:
1、记录登陆用户的登陆时间、登陆IP等。
2、限制某些用户,如Test,在工作时间内不能登陆数据库。
3、限制某些用户,如sa,只能在指定IP或者IP段登陆。
4、限制只有来自指定IPIP段的登陆可以成功登陆。

登陆触发器语法:

  1. --创建或修改登陆触发器
  2. CREATE [ OR ALTER ] TRIGGER trigger_name --触发器名字
  3. ON ALL SERVER
  4. [ WITH <logon_trigger_option> [ ,...n ] ] --在实际项目中,多使用管理员账号建立登陆触发器,因而这项可以省略
  5. { FOR| AFTER } LOGON
  6. AS
  7. sql_statement --用户自己编写内容
  8.  
  9. <ddl_trigger_option> ::=
  10. [ ENCRYPTION ]
  11. [ EXECUTE AS Clause ]
  12.  
  13. -- WITH ENCRYPTION 表示加密该触发器的SQL,使用该项后,将无法通过sp_helptext或数据库管理器查看触发器SQL
  14. -- WITH EXECUTE AS Clause ,示例:WITH EXECUTE AS 'sa',指定触发器使用哪个用户的权限,省略该项,将使用登陆用户的权限。
  1. --删除登陆触发器
  2. DROP TRIGGER trigger_name ON ALL SERVER
  1. --查询登陆触发器
  2. select * from sys.server_triggers

 备注:在登陆触发器内部使用函数EVENTDATA()可以获取触发器上下文事件信息,使用函数ORIGINAL_LOGIN()可以获取当前登陆的用户名。

  1. --登陆触发器示例
    --
    限制用户Test在工作时间(上午7时,晚上18时之间)不能登陆数据库
  2. create trigger tr_XianZhiDengLu
  3. on all server
  4. for logon
  5. as
  6. declare @XianZaiShiJian datetime
  7. set @XianZaiShiJian=GETDATE ()
  8. if ORIGINAL_LOGIN()='test' and (DATEPART(hh,getdate()) >7 and DATEPART(hh,getdate())<18)
  9. begin
  10. rollback
  11. end

参考文献:

登陆触发器

 

写作时间:2018-10-05

=====================================================================================
本文只代表本人的见解,可能存在错误,仅用于技术交流。如果你喜欢该文,可以扫下面的二维码打赏我(打赏敬请备注“博客园打赏”五字)。

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号