禁止修改数据库的数据表示例

/* 利用触发器禁止修改一些特殊的数据表 */

CREATE TRIGGER Table_Monitor ON DATABASE

FOR CREATE_TABLE,ALTER_TABLE,DROP_TABLE

AS

Declare @S Varchar(800)

Set @S=EVENTDATA().value(‘(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]‘,‘nvarchar(max)‘)

Print @S

Create Table dbo.Test2(ID Int Not Null) --创建表

Go

Alter Table dbo.Test2 Add Name Varchar(20) --添加字段

Go

Alter Table dbo.Test2 Alter Column Name Varchar(40) --修改字段

Go

Alter Table dbo.Test2 Add Constraint PK_Test2 Primary Key (ID) --添加主键

Go

Alter Table dbo.Test2 Drop Column Name --删除字段

Go

Drop Table dbo.Test2 --删除测试表

--监控表,若名为表,若名为表,若名为Test2Test2Test2Test2Test2、Test3Test3Test3Test3Test3,

--则取消操作则取消操作则取消操作

Create TRIGGER Table_Monitor_Deny ONDATABASE

FOR CREATE_TABLE,ALTER_TABLE,DROP_TABLE

AS

Declare @S Varchar(800)

Set @S=EVENTDATA().value(‘(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]‘,‘nvarchar(max)‘)

Set @S=SubString(@S,CharIndex(‘Table‘,@S)+6,200) --截取关键词Table后面的字符串,以准备取表名

If CharIndex(‘ ‘,@S)>0

Set @S=SubString(@S,1,CharIndex(‘ ‘,@S)-1) --截取表名,若表名含有空格,则会误判

If CharIndex(‘.‘,@S)>0 --若含. 通常是方案名, 如dbo.Test2

Set @S=SubString(@S,CharIndex(‘.‘,@S)+1,200)

Set @S=Replace(@S,‘[‘,‘‘) --表名可能以[]界定表示,如dbo.[Test2]

Set @S=Replace(@S,‘]‘,‘‘)

If CharIndex(@S,‘Test2,Test3,‘)>0 --若为Test2、Test3,则取消操作

Begin

Set @S=‘表:‘+@S+‘ 禁止任何DDL 操作‘

RaisError(@S,10,1)

Rollback

End

--创建后,再创建表名为Test2(或已有表Test2,对其修改、删除表结构),就会返回错误

--删除、删除DDLDDL 触发器触发器

Drop Trigger Table_Monitor On Database

Drop Trigger Table_Monitor_Deny OnDatabase

--创建服务器级DDLDDL 触发器,此处以登录为例触发器,此处以登录为例触发器

Use Master

Go

--创建日志表

Create Table dbo.SysLog(_Date DateTime,Remark Varchar(800))

Go

--创建测试登录帐号

Create Login LoginTest With Password=‘[email protected]#‘

--创建测试用户

Create User LoginUser For Login LoginTest

--授予插入权限,否则以LoginTest登录时会报错

Grant Insert To LoginUser

Go

Create TRIGGER Logon_Monitor ON All SERVER

FOR LOGON

AS

Set NoCount On

Declare @S Varchar(800)

Select @S=‘登录时间:‘+Convert(Char(19),Login_Time,121)+‘ 电脑名:‘+Host_Name

+‘ 登录名:‘+Login_Name+‘ SPID:‘+Cast(@@SPID as Varchar(10))

From Sys.dm_exec_sessions Where session_id=@@SPID

Insert Master.dbo.SysLog(_Date,Remark) Values (GetDate(),@S)

--开启SSMS以SQL登录帐号LoginTest、sa或Windows管理员帐号登录SQL SERVER,再执行查询验证效果:

Select _Date,Remark From dbo.SysLog order By _Date Desc

--删除服务器级删除服务器级删除服务器级DDLDDL 触发器

Drop Trigger LogOn_Monitor On All Server

时间: 2024-10-05 00:06:24

禁止修改数据库的数据表示例的相关文章

前端学数据库之数据表操作

× 目录 [1]准备工作 [2]创建数据表 [3]查看数据表[4]记录操作[5]记录约束[6]列操作[7]约束操作[8]修改列[9]数据表更名 前面的话 mysql数据库中的数据存储在被称为表(tables)的数据库对象中.表是相关的数据项的集合,它由列(字段)和行(记录)组成.下面将详细介绍数据表操作 准备工作 在进行数据表操作之前,需要先登录mysql服务器,创建一个数据库,并使用创建好的数据库 创建数据表 下面在db1数据库中创建数据表tb1 CREATE TABLE [IF NOT EX

【mysql元数据库】使用information_schema.tables查询数据库和数据表信息

概述 对于mysql和Infobright等数据库,information_schema数据库中的表都是只读的,不能进行更新.删除和插入等操作,也不能加触发器,因为它们实际只是一个视图,不是基本表,没有关联的文件. information_schema.tables存储了数据表的元数据信息,下面对常用的字段进行介绍: table_schema: 记录数据库名: table_name: 记录数据表名: engine : 存储引擎: table_rows: 关于表的粗略行估计: data_lengt

mysql数据库、数据表、数据基本操作

1 连接数据库 mysql -h 主机地址 -u用户名 -p 密码 2 查看数据库 show databases; 3 查看版本号 select version(); 4 查看当前数据库 select database(); 5 查看现有的数据表 show tables; 6 查看数据表结构 desc 表名; 7 查看数据表创建语句 show create table table_name; 8 查询数据 select * from 表名; 9 查看数据表的前三条数据 select * from

Python数据库操作 MySQL数据库与数据表操作#学习猿地

# MySQL数据库与数据表操作 + 数据库的操作 + 数据库创建 + 数据库删除 + 数据表的操作 + 数据表的创建 + 数据表的修改 (表结构) + 数据表的删除 ### 数据库的操作 #### 1.数据库的创建 ```mysql # 链接mysql数据库后,进入mysql后可以操作数据 # 1. 创建库 create database if not exists tlxy default charset=utf8: -- 1. 数据库 tlxy 如果不存在则创建数据库,存在则不创建 --

php创建mysql数据库以及数据表

用php链接到mysqli,成功后利用,mysqli_query()创建数据库以及数据表. <php $con = mysqli_connect("localhost","root","root"); if(!$con) { die("没有连接成功".mysqli_error()); }; if(!mysqli_query($con,"create database jiangxia ")) { di

mysql数据库和数据表的操作

1. cmd连接数据库 mysql -hlocalhost -uroot -p123 // mysql -uroot (因为我是本地,并且没有设置密码) 2. 重命名数据表和移动数据表 mysql里面有:数据库samp_db,其下有数据表students,teachers. 现在我要把表移动到school_db下面去,具体操作: 注意:重命名数据库的命令被去除了,rename database 命令被去除了.理由是丢失数据. // 具体原因官网有,但是不能理解 新建数据库:school_db;

代码收藏系列--mysql创建数据库、数据表、函数、存储过程命令

创建mysql数据库 CREATE DATABASE IF NOT EXISTS `database_name` DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 创建mysql数据表 drop table if exists `table_name`; create table if not exists `table_name` ( id int auto_increment primary key comment '主键编号', `name` va

mysql中数据库与数据表编码格式的查看、创建及修改

一.查看数据库编码格式 ? 1 mysql> show variables like 'character_set_database'; 二.查看数据表的编码格式 ? 1 mysql> show create table <表名>; 三.创建数据库时指定数据库的字符集 ? 1 mysql>create database <数据库名> character set utf8; 四.创建数据表时指定数据表的编码格式 ? 1 2 3 4 5 create table tb

二 数据库、数据表操作

一 系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MySQL 5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件.锁等现象 mysql: 授权库,主要存储系统用户的权限信息test: MySQL数据库系统自动创建的测试数据库 二 创建数据库 1 语法(help create database) CREATE DA