sql - 全局 DLL 触发器
问题描述
我只需要阻止某些应用程序访问 SQL 服务器。我们的 CRM 通过设计所有用户设置 db_owner 模式。
我发现这个触发器如何阻止一个应用程序的访问。但我需要再添加一个。
你能帮助我吗?
USE [master]
GO
CREATE TABLE master..PokusOLogin3
(
ID INT IDENTITY PRIMARY KEY
, Datum datetime DEFAULT GETDATE()
, LoginName SYSNAME
, Program SYSNAME
, Pocitac SYSNAME
)
GO
CREATE TRIGGER [OnlyAppka]
ON ALL SERVER WITH EXECUTE AS 'sa'
FOR LOGON
AS
BEGIN
DECLARE @LoginName SYSNAME
DECLARE @Pocitac SYSNAME
DECLARE @data XML
SET @data = EVENTDATA()
DECLARE @AppName SYSNAME
SELECT @AppName = program_name, @Pocitac = host_name FROM sys.dm_exec_sessions WHERE session_id = @data.value('(/EVENT_INSTANCE/SPID)[1]', 'int')
IF @AppName NOT LIKE 'Appka%'
--Pokud spousteny program neni Appka
SET @LoginName = @data.value('(/EVENT_INSTANCE/LoginName)[1]', 'SYSNAME')
IF @LoginName NOT IN (SELECT p.name FROM sys.server_principals p JOIN sys.syslogins s ON p.sid = s.sid WHERE s.sysadmin = 1
UNION ALL SELECT service_account FROM sys.dm_server_services)
--A pokud program nespousti administrator sql serveru, nebo sluzba sql serveru
BEGIN
ROLLBACK
--Ukonci session (pokus o prihlaseni)
INSERT INTO master..PokusOLogin (LoginName, Program, Pocitac)
SELECT @LoginName --@LoginName
, @AppName, @Pocitac
--A tento pokus zaloguj do tabulky
END
END
解决方案
如果 @AppName 不喜欢 'Appka%' 或 @AppName 不喜欢 'Appka1%'
推荐阅读
- python - Python for 循环。从 AWS 中提取特定值
- python - 这是我在尝试解决黑客等级热身练习时遇到的问题
- .net - 写/读进程内存
- linux - 在 git 存储库中找到 5 个最大(按行数)的文件
- python - 在 Tkinter 上制作一个计算器来计算向量的大小
- javascript - 如何将“同义词”添加到
- apache-kafka - 使用 Kafka 管理器或 Kafka cli 减少主题复制因子
- xamarin.forms - 带圆角的图像
- javascript - 为什么在移动 Chrome 浏览器上从 cookie 获取 Django 的 CSRF 令牌失败?
- r - 如何在具有多个时间序列的 GGPLOT 中插入图例