[SqlServer01]-数据库表及数据操作控制

来源:互联网 发布:恒慧融软件 编辑:程序博客网 时间:2024/06/06 00:59

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

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


0 0
原创粉丝点击