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

[SqlServer01]-数据库表及数据 *** 作控制,第1张

概述有时候我们希望某些表的数据不能被删除,可以使用下面的触发器。 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) E

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

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

总结

以上是内存溢出为你收集整理的[SqlServer01]-数据库表及数据 *** 作控制全部内容,希望文章能够帮你解决[SqlServer01]-数据库表及数据 *** 作控制所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/sjk/1163681.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存