SQL SERVER 2005中,新增加了许多新的特性,其中的DDL触发器是个不错的选择,根据资料初步学习如下,现整理之:
DROP
DATABASE
[
DDLTRTEST
]
GO
CREATE
DATABASE
DDLTRTEST
GO
USE
[
DDLTRTEST
]
GO
IFEXISTS (
SELECT
*
FROM
SYS.OBJECTS
WHERE
OBJECT_ID
=
OBJECT_ID
(N
'
[DBO].[MYTABLE]
'
)
AND
TYPE
IN
(N
'
U
'
))
DROP
TABLE
[
DBO
]
.
[
MYTABLE
]
GO
CREATE
TABLE
MYTABLE(ID
INT
, NAME
VARCHAR
(
100
))
GO
INSERT
INTO
MYTABLE
SELECT
1
,
'
A
'
INSERT
INTO
MYTABLE
SELECT
2
,
'
B
'
INSERT
INTO
MYTABLE
SELECT
3
,
'
C
'
INSERT
INTO
MYTABLE
SELECT
4
,
'
D
'
INSERT
INTO
MYTABLE
SELECT
5
,
'
E
'
INSERT
INTO
MYTABLE
SELECT
6
,
'
F
'
GO
USE
[
DDLTrTest
]
GO
IFEXISTS (
SELECT
*
FROM
sys.objects
WHERE
object_id
=
OBJECT_ID
(N
'
[dbo].[usp_querymytable]
'
)
AND
type
in
(N
'
P
'
, N
'
PC
'
))
DROP
PROCEDURE
[
dbo
]
.
[
usp_querymytable
]
GO
CREATE
PROC
USP_QUERYMYTABLE
AS
SELECT
*
FROM
MYTABLE
GO
CREATE
TRIGGER
STOP_DDL_on_Table_and_PROC
ON
DATABASE
FOR
CREATE_TABLE,DROP_TABLE,
ALTER_TABLE,CREATE_PROCEDURE,
ALTER_PROCEDURE,DROP_PROCEDURE
AS
SELECT
EVENTDATA().value
(
'
(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]
'
,
'
nvarchar(max)
'
)
PRINT
'
You are not allowed to CREATE,ALTER and DROP
any Tables and Procedures
'
ROLLBACK
;
ALTER
TABLE
MYTABLE
ADD
X
INT
(
1
row(s) affected)
You are
not
allowed
to
CREATE
,
ALTER
and
DROP
any
Tables
and
Procedures
Msg
3609
,
Level
16
, State
2
, Line
1
The
transaction
ended
in
the
trigger
. The batch has been aborted.
DROP
TABLE
MYTABLE
(
1
row(s) affected)
You are
not
allowed
to
CREATE
,
ALTER
and
DROP
any
Tables
and
Procedures
Msg
3609
,
Level
16
, State
2
, Line
1
The
transaction
ended
in
the
trigger
. The batch has been aborted
CREATE
TRIGGER
STOP_DDL_on_Table_and_PROC
ON
ALL
SERVER
FOR
CREATE_DATABASE,ALTER_DATABASE,DROP_DATABASE
AS
PRINT
'
You are not allowed to CREATE,ALTER and DROP any Databases
'
ROLLBACK
;
本文介绍了 SQL Server 2005 中新增的 DDL 触发器功能,通过示例展示了如何创建和使用 DDL 触发器来限制特定的数据库操作。
2089

被折叠的 条评论
为什么被折叠?



