![[SqlServer01]-数据库表及数据 *** 作控制,第1张 [SqlServer01]-数据库表及数据 *** 作控制,第1张](/aiimages/%5BSqlServer01%5D-%E6%95%B0%E6%8D%AE%E5%BA%93%E8%A1%A8%E5%8F%8A%E6%95%B0%E6%8D%AE%E6%93%8D%E4%BD%9C%E6%8E%A7%E5%88%B6.png)
有时候我们希望某些表的数据不能被删除,可以使用下面的触发器。
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]-数据库表及数据 *** 作控制所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)