Heim >Datenbank >MySQL-Tutorial >[SqlServer01]

[SqlServer01]

WBOY
WBOYOriginal
2016-06-07 15:33:59977Durchsuche

有时候我们希望某些表的数据不能被删除,可以使用下面的触发器。 Create trigger [dbo].[trg_del] on [dbo].LogInfo instead of delete AS BEGIN declare @cou int select @cou=count(*) from deleted; if (@cou0) RAISERROR('数据不允许删除!', 16, 1) END

有时候我们希望某些表的数据不能被删除,可以使用下面的触发器。

Create trigger [dbo].[trg_del] on [dbo].LogInfo
instead of delete
AS
BEGIN
declare @cou int
select @cou=count(*) from deleted;
if (@cou>0)
RAISERROR('数据不允许删除!', 16, 1)
END

但需要注意 truncate table LogInfo 命令依然会正确执行,因为truncate 不会触发触发器,不会写日志,所以无法回滚,使用时要谨慎。

有时候我们需要灵活指定一些用户可以删除和修改数据表结构,未指定的用户则不能做这些操作,可以使用下面的触发器

CREATE TRIGGER TR_Safety_Table 
ON DATABASE 
FOR DROP_TABLE, ALTER_TABLE
AS 
IF( ( SUSER_SNAME() 'sa' )and (SUSER_SNAME() 'test') )
   BEGIN
   PRINT '你无DROP TABLE 和 ALTER TABLE 的权限!' 
   ROLLBACK
END

关于数据库或表的权限其实可以通过角色,权限来控制,下面是常用的一些基本语句,写在这里备忘。

--登陆、用户与权限
--删除登陆
--exec sp_droplogin 'test'
--新建登陆
exec sp_addlogin @loginame = N'test',
@passwd = '123456', 
@defdb = N'TestDB', 
@deflanguage = N'Simplified Chinese', 
@sid = NULL, 
@encryptopt = NULL 
GO

--删除用户
--exec sp_dropuser 'test'

exec sp_adduser 'test'
--授权
GRANT SELECT, INSERT, UPDATE, DELETE
ON LogInfo
TO test
--收回权限
revoke DELETE on LogInfo from test;
--拒绝权限
deny DELETE on LogInfo TO test;
--授予角色权限
--exec sp_addrolemember 'db_owner','test'
--列出全部表名
--select name from sysobjects where xtype = 'U' order by name


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn