定制默认系统帐号不能被更新与删除

来源:未知 责任编辑:责任编辑 发表时间:2014-03-23 22:29 点击:

最近的专案使用这个功能,开发时为程序使用了就定了一个系统帐号如sa,由于某些要求,此帐号不能被更改或是删除,但用户可以添加其它帐号。可以参考下面动画。

  \


 

实现这样的功能,也许方法有很多种。Insus.NET使用了SQL的触发器(Trigger),在删除或是更新做了触发。
更新触发器,sa帐号不能被用户更新:
  tri_Users_Update
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        Insus.NET
-- Create date: 2012-03-03
-- Description:    Disable update system account.
-- =============================================
CREATE TRIGGER [dbo].[tri_Users_Update]
   ON  [dbo].[Users]
   FOR UPDATE
AS
BEGIN   
    IF @@ROWCOUNT = 0
        RETURN
    SET NOCOUNT ON;
   
    DECLARE @UsersId INT,@Account NVARCHAR(100)   
    SELECT @UsersId = [UsersId] FROM deleted
    SELECT @Account = [Account] FROM inserted
    IF @UsersId = 1 and @Account <> N'sa'
    BEGIN
        RAISERROR(N'系统帐号,不能更新。',16,1)
        ROLLBACK TRANSACTION
    END
       
END

 
 删除触发器,sa帐号不能被用户删除。:
  tri_Users_Delete
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        Insus.NET
-- Create date: 2012-03-03
-- Description:    Disable delete system account.
-- =============================================
ALTER TRIGGER [dbo].[tri_Users_Delete]
   ON  [dbo].[Users]
   FOR DELETE
AS
BEGIN   
    IF @@ROWCOUNT = 0 RETURN
    SET NOCOUNT ON;
   
    DECLARE @UsersId INT,@Account NVARCHAR(100)
   
     SELECT @UsersId = [UsersId],@Account = [Account] FROM deleted
    IF @UsersId = 1 OR @Account = 'sa'
    BEGIN
        RAISERROR(N'系统帐号,不能删除。',16,1)
        ROLLBACK TRANSACTION
    END
       

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • 浅析.NET下XML数据访问新机制
  • asp.net 面试+笔试题目第1/2页
  • C# 邮件地址是否合法的验证
  • asp.net 设置GridView的选中行的实现代码
  • C#高级编程:数据库连接[1]
  • 经典C++程序1
  • IIS 自动回收导致后台定时器失效的问题解决
  • ASP.NET&#160;GridView列表代码示例
  • Asp.net MVC源码分析--Action Filter的链式调用
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1