使用登录触发器限制SQL Server登录身份验证范围

本文在安全方面包含SQL Server登录身份验证范围,即如何可以控制SQL Server级登录触发器控制登录身份验证扩展。

常见SQL Server主体是客户端和登录名,并且受GRANT和DENY的授权约束。 SQL Server数据库引擎将通过来自任何Query Management Studio(SSMS),Application Integration或某些其他设备的身份验证请求来授权登录。

开发,QA或阶段服务器可以允许所有登录使用不同的客户应用程序对SQL Server进行身份验证,但是对于生产服务器,我们不能。 SQL Server登录应该使用进入客户端应用程序的授权身份验证的入口方法进行限制。 在本文中,我们将详细体验如何使用预定义的规则来限制SQ​​L Server登录范围,以批准客户/客户端应用程序。

本质上,数据库工程师将获得同意的访问权限,以将SQL Server数据库引擎用作指定级别。 作为行业标准,组织将对数据库用户进行单独登录以访问生产环境; 现在,每个应用程序可以具有不同SQL登录名,以便与数据库进行通信,无论如何,SQL登录名应该仅由数据库引擎利用客户\客户端应用程序来授权,而不仅仅是通过使用任何Query Management Studio或工具。

Microsoft SQL Server支持各种类型SQL触发器,例如DDL(数据定义语言),DML(数据操作语言)和登录触发器。

可以在登录触发器中定义授权规则指标,以命令SQL登录以增强数据库的安全性。 看到这里,我们试图阐明将登录触发中的不同原理与模型联系在一起的各种情况:
在这里插入图片描述

允许登录授权访问数据库引擎。 (Allow Logins to Authorize to access database Engine.)

--Drop trigger tr_LimitUserApp ON ALL SERVER
 
    CREATE TRIGGER tr_LimitUserApp ON ALL SERVER
    FOR LOGON
    AS
         BEGIN
             DECLARE @app NVARCHAR(100);
             SET @app = APP_NAME();
             IF(@App LIKE 'SQL Server Management Studio')
                 BEGIN
                     RETURN;
             END;
                 ELSE
                 PRINT 'You are not allowed to connect from ' + @app + 'Status:- Failed';
             ROLLBACK;
         END;

例如,服务器“ sa”,“ jraiyani”,“ myel”和“ sdonda”中存在四个登录名。 必要时,我们只需要允许其中的几个“ sa”和“ jraiyani”访问SQL Server数据库引擎,这时下面会触发协助我们进行监督。

CREATE TRIGGER Prevent_login
ON ALL SERVER WITH EXECUTE AS 'sa'
FOR LOGON
AS
BEGIN
  DECLARE @LoginName sysname
  DECLARE @LoginType sysname
  
  SET @LoginName = ORIGINAL_LOGIN()
 
  IF(@LoginName NOT IN ('sa', 'jraiyani')) 
  BEGIN
    ROLLBACK; --Disconnect the session
  END
END

允许某些应用程序授权访问数据库引擎。 (Allow certain Applications to Authorize to access database Engine.)

在下面的示例中,我们仅允许“ myel”用户使用“ SQLCMD”应用程序登录。

CREATE TRIGGER Prevent_login
ON ALL SERVER WITH EXECUTE AS 'sa'
FOR LOGON
AS
BEGIN
  DECLARE @AppName varchar(max)
  DECLARE @LoginName sysname
  DECLARE @LoginType sysname
  
  SET @AppName = APP_NAME()
  SET @LoginName = ORIGINAL_LOGIN()
 
  IF(@LoginName = 'myel' AND @AppName like 'SQLCMD')
  BEGIN
    RETURN;--Login Authorized
  END
  IF(@LoginName NOT IN ('sa', 'jraiyani', 'sdonda'))
  BEGIN
    ROLLBACK; --Disconnect the session
  END

用户成功登录以进行授权SQL登录。
在这里插入图片描述

SQL Server将不允许第二个IF条件中提到的受限用户。 在这种情况下,SQL Server将返回带有登录触发器参考的错误,如下图。
在这里插入图片描述

我们可以在这里提到不同的客户端应用程序名称,以及客户端应用程序和SQL登录名的组合,以在SQL身份验证中过滤掉。

结论: (Conclusion:)

在登录触发器的帮助下,同样可以观察到客户端连接,类似于关联了哪个客户端以及何时在不同SQL Server安全级别上与准则共同努力共同建立了连接。 定期拒绝可能的高安全性安排,例如,默认的组织设置,登录名和密码,由 侵略者。
Microsoft SQL Server Data Tools, T-SQL Editor(vs登录)、Navicat Premium(Navicat Premium登录)、Microsoft SQL Server Management Studio 、 SQLCMD(cmd登录)
除了用户跟客户端应用,还可以通过SQLSERVER获取客户端IP针对电脑放权。
原文出处;https://blog.csdn.net/culuo4781/article/details/107626453

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
SQL Server触发器是一种与表事件相关的特殊存储过程,用于保证数据完整性和实施业务规则。触发器是在对表进行操作(插入,删除,更新)时自动激活执行的。触发器可以用于实现检查约束、维护冗余数据、维护外键列数据等功能。触发器有创建、删除和修改的语法。创建触发器的语法是"create trigger trigger_name on {table_name | view_name} for | after | instead of delete | insert | update as sql_statement",删除触发器的语法是"drop trigger trigger_name",修改触发器的语法是"alter trigger trigger_name on {table_name | view_name} for | after | instead of delete | insert | update as sql_statement"。登录触发器是一种特殊类型的触发器,它会在与SQL Server实例建立用户会话时触发。登录触发器在用户身份验证完成后,但用户会话实际建立之前激发。登录触发器可以用于在登录事件发生时执行存储过程并记录相关信息。123 #### 引用[.reference_title] - *1* *3* [SQL Server触发器(附有实例)](https://blog.csdn.net/weixin_45763353/article/details/116852556)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* [sql server中的触发器](https://blog.csdn.net/guokeeiron/article/details/129970903)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

难自拔于世界之大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值