加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 12:56:58 所属栏目:MsSql教程 来源:网络整理
导读:有时候我们希望某些表的数据不能被删除,可以使用下面的触发器。 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读