SQL Server基础之登陆触发器

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

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

前面说到登陆触发器是纯粹的安全工具,作为安全工具,登陆触发器使用场景都是与安全有关的。下面列举了登陆触发器使用的4种场景:

1、记录登陆用户的登陆时间、登陆IP等。

2、限制某些用户,如Test,在工作时间内不能登陆数据库。

3、限制某些用户,如sa,只能在指定IP或者IP段登陆。

4、限制只有来自指定IP或IP段的登陆可以成功登陆。

登陆触发器语法:

--创建或修改登陆触发器
CREATE [ OR ALTER ] TRIGGER trigger_name   --触发器名字
ON ALL SERVER
[ WITH <logon_trigger_option> [ ,...n ] ]  --在实际项目中,多使用管理员账号建立登陆触发器,因而这项可以省略
{ FOR| AFTER } LOGON
AS
  sql_statement   --用户自己编写内容

<ddl_trigger_option> ::=
    [ ENCRYPTION ]
    [ EXECUTE AS Clause ]  

-- WITH ENCRYPTION 表示加密该触发器的SQL,使用该项后,将无法通过sp_helptext或数据库管理器查看触发器SQL。
-- WITH EXECUTE AS Clause ,示例:WITH EXECUTE AS ‘sa‘,指定触发器使用哪个用户的权限,省略该项,将使用登陆用户的权限。
--删除登陆触发器
DROP TRIGGER  trigger_name   ON ALL SERVER  
--查询登陆触发器
select * from sys.server_triggers

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

--登陆触发器示例--限制用户Test在工作时间(上午7时,晚上18时之间)不能登陆数据库
create trigger tr_XianZhiDengLu
on all server
for logon
as
    declare @XianZaiShiJian datetime
    set @XianZaiShiJian=GETDATE ()

    if ORIGINAL_LOGIN()=‘test‘ and (DATEPART(hh,getdate()) >7 and DATEPART(hh,getdate())<18)
        begin
          rollback
        end

参考文献:

登陆触发器

写作时间:2018-10-05

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

原文地址:https://www.cnblogs.com/j20171203/p/9745042.html

时间: 2024-10-11 18:04:20

SQL Server基础之登陆触发器的相关文章

SQL Server基础

一.常用命令 1.使用命令行开启SQL Server服务 获取管理员权限的命令行工具: net start mssqlserver 开启sql server服务 net restart mssqlserver 重新启动sql server服务 net stop mssqlserver 关闭sql server服务 2.使用命令登陆(该方法可适用于在一台没有SQL Server的电脑去操作一台有SQL Server的电脑) 运行: sqpl ?/ [-S 服务器的名称]  [-U 登陆名] [-P

SQL Server基础知识

查看sql server版本 select @@VERSION 基本操作 use tty; 使用tty数据库 create table tt(name varchar(10)); 新建表tt insert into tt values('ftp'); 插入数据ftp select * from tt; 查看表tt delete from tt; 删除表表tt中的一条记录 运行命令的快捷方式: Alt+x 重启数据库服务 net restart mssqlserver 修改用户密码 企业管理器——

sql server 2008 r2 修改sa密码 通过sql server 身份验证登陆

sql server 2008 r2 修改sa密码 通过sql server 身份验证登陆 解决方法如下 通过windows 身份验证登陆后, 首先选中服务器(右键)->属性 ->安全性->服务器身份验证修改为"SQL SERVER和WINDOWS身份验证模式"其次展开服务器上的"安全性"->登陆名->选中SA登陆帐号(右键)->状态->登陆修改为启用, 并在常规选项中修改密码 确认后重启 sel server sql se

SQL Server 基础 03 查询数据基础

查询数据 简单的查询 1 create table stu_info 2 ( 3 sno int not null 4 ,sname varchar(20) not null 5 ,sex varchar(2) not null 6 ,birth varchar(20) not null 7 ,email varchar(20) not null 8 ,telephone int not null 9 ,depart varchar(20) not null 10 ) 11 12 13 sele

SQL server基础知识(表操作、数据约束、多表链接查询)

SQL server基础知识 一.基础知识 (1).存储结构:数据库->表->数据 (2).管理数据库 增加:create database 数据库名称 删除:drop database 数据库名称 查询:select name from master..sysdatabases 修改:alter database 数据库名称(在 sql server 中修改与数据库关联的文件和文件组.在数据库中添加或删除文件和文件组.更改数据库或其文件和文件组的属性) (3).管理表 选择数据库:use 数

SQL Server 基础 04 函数与分组查询数据

函数与分组查询数据 系统函数分 聚合函数.数据类型转换函数.日期函数.数学函数 . . . 1. 聚合函数 主要是对一组值进行计算,然后返回一个值. 聚合函数包括 sum(求和).avg(求平均值).min().max().count(求数量) sum函数语法  :  sum(列明) select sum(sno) as 序号和 from stu_info avg select avg(sno) as 序号平均值 from stu_info . . . count 用来一组值的个数,统计 sel

查看SQL SERVER 加密存储过程,函数,触发器,视图

原文:查看SQL SERVER 加密存储过程,函数,触发器,视图 create  PROCEDURE sp_decrypt(@objectname varchar(50))ASbeginset nocount on--CSDN:j9988 copyright:2004.07.15 --V3.2 --破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器--修正上一版"视图触发器"不能正确解密错误--发现有错,请E_MAIL:[email protected]be

SQL Server基础之库级触发器

触发器分为两种,一种与数据表绑定,响应数据表指定动作(insert.delete或update),此处称为表级:一种与数据库本身绑定,响应数据定义(DDL)语句(主要是CREATE.ALTER 和 DROP 开头的语句),此处称为库级.本篇以下所说触发器皆指库级触发器. 触发器(又名DDL触发器)是一段有特定语法,实现一定功能的SQL语句,它与数据库本身绑定,当数据库发生指定动作(主要是CREATE.ALTER 和 DROP 开头的语句,完整响应事件请看这里)时,由数据库自动调用.触发器可以选择

sql server 基础教程[温故而知新三]

子曰:“温故而知新,可以为师矣.”孔子说:“温习旧知识从而得知新的理解与体会,凭借这一点就可以成为老师了.“ 尤其是咱们搞程序的人,不管是不是全栈工程师,都是集十八般武艺于一身.不过有时候有些知识如果有很久没用了的话,就会忘记,甚至是忘的你一点都想不起来,尤其是一些基础的东西.所以我才打算写个"温故而知新"的系列博文出来,一来是这些基础的东西我比较健忘,以后方便自己翻阅:二来是希望可以帮助到一些刚入门的朋友.这个系列记录的所有知识点都是最最最(重要的事情说三遍)基础的知识.大部分都是我