ITPub博客

首页 > IT职业 > IT图书 > 定制默认系统帐号不能被更新与删除

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

IT图书 作者:hunter_tols 时间:2021-09-09 10:11:55 0 删除 编辑

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


 

实现这样的功能,也许方法有很多种。Insus.NET使用了SQL的触发器(Trigger),在删除或是更新做了触发。

更新触发器,sa帐号不能被用户更新:

5acf07290001405b00110016.jpgtri_Users_UpdateSET 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帐号不能被用户删除。:

5acf07290001405b00110016.jpgtri_Users_DeleteSET 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
        
END

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4604/viewspace-2817978/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-08

  • 博文量
    87
  • 访问量
    615