|
| 1 | +/* |
| 2 | +Author: Patrick Keisler |
| 3 | +Original link: http://www.patrickkeisler.com/2017/05/create-whitelist-for-sql-server-updated.html |
| 4 | +*/ |
| 5 | + |
| 6 | +USE master; |
| 7 | +GO |
| 8 | + |
| 9 | +IF OBJECT_ID('dbo.WhiteList') IS NOT NULL |
| 10 | + DROP TABLE dbo.WhiteList; |
| 11 | +GO |
| 12 | + |
| 13 | +CREATE TABLE dbo.WhiteList |
| 14 | +( |
| 15 | + Id INT IDENTITY(1,1) PRIMARY KEY |
| 16 | + ,LoginName VARCHAR(255) |
| 17 | + ,HostName VARCHAR(255) |
| 18 | + ,HostIpAddress VARCHAR(50) |
| 19 | + ,Comments VARCHAR(2000) |
| 20 | +); |
| 21 | +GO |
| 22 | + |
| 23 | +GRANT SELECT ON dbo.WhiteList TO PUBLIC; |
| 24 | +GO |
| 25 | + |
| 26 | +INSERT dbo.WhiteList(LoginName,HostName,HostIpAddress,Comments) |
| 27 | +VALUES |
| 28 | + ('*','ECHOBASE1','*','Any user from the workstation "ECHOBASE1" is allowed to connect, regardless of IP address.') |
| 29 | + ,('WebSiteLogin','webserver1','192.168.100.55','Only the WebSiteLogin from webserver1 with an IP of 192.168.100.55 is allowed access.'); |
| 30 | +GO |
| 31 | + |
| 32 | +CREATE TRIGGER WhiteListTrigger |
| 33 | +ON ALL SERVER FOR LOGON |
| 34 | +AS |
| 35 | +BEGIN |
| 36 | + DECLARE |
| 37 | + @LoginName VARCHAR(255) = ORIGINAL_LOGIN() |
| 38 | + ,@HostName VARCHAR(255) = HOST_NAME() |
| 39 | + ,@HostIpAddress VARCHAR(50) = CONVERT(VARCHAR(50),CONNECTIONPROPERTY('client_net_address')); |
| 40 | + |
| 41 | + IF |
| 42 | + ( |
| 43 | + SELECT COUNT(*) FROM dbo.WhiteList |
| 44 | + WHERE |
| 45 | + ( |
| 46 | + (LoginName = @LoginName) OR (LoginName = '*') |
| 47 | + ) |
| 48 | + AND |
| 49 | + ( |
| 50 | + (HostName = @HostName) OR (HostName = '*') |
| 51 | + ) |
| 52 | + AND |
| 53 | + ( |
| 54 | + (HostIpAddress = @HostIpAddress) OR (HostIpAddress = '*') |
| 55 | + ) |
| 56 | + ) = 0 |
| 57 | + ROLLBACK; |
| 58 | +END; |
| 59 | +GO |
0 commit comments