我做了一个触发器,它将检查登录用户的IP地址是否与Allowed_IPs表中的IP匹配。如果匹配,则用户可以登录。如果没有匹配,则用户无法登录。
ALTER TRIGGER [Logon_Screen]
ON ALL SERVER
FOR LOGON
AS
BEGIN
DECLARE @IP VARCHAR(MAX)
DECLARE @Matching_IP INT
SELECT @IP = EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]','nvarchar(128)')
SET @Matching_IP = (SELECT COUNT(*) FROM DAT.dbo.[Allowed_IPs] WHERE [Allowed_IP] = @IP)
IF @Matching_IP = 0
BEGIN
ROLLBACK
END
END
上面的代码工作正常,但有一个奇怪的问题。除非正在记录的用户是sysadmin的成员或具有Control Server权限,否则即使用户的IP地址在Allowed_IPs表中,触发器也会阻止登录。显然,我不能只给所有用户管理员权限,所以我还能做什么?