我们正在运行SQL Server2016。出于内部政治原因,我不能以自己想要的方式限制访问。假设我不能改变前提。
我们有一个用于SSIS程序包的用户。不幸的是,一些开发人员正在使用此用户使用ssms直接登录db。我需要在不更改密码或其他内容的情况下阻止它。我需要的是仅允许用户访问从SSIS包运行的数据库,而不能以其他任何方式访问数据库。
我没有在寻找有关如何解决此问题的其他建议。我已经了解了其中大多数信息,因为无法更改的管理决策而陷入困境。
有人可以告诉我如何以这种方式限制用户吗?
答案 0 :(得分:1)
一种方法是使用LOGON触发器
第一种腮红方法可能是拒绝任何看起来像SSMS应用程序的过程
CREATE OR ALTER TRIGGER logon_developer_check
ON ALL SERVER
FOR LOGON
AS
BEGIN
IF (ORIGINAL_LOGIN() = 'triskydeveloper'
and EXISTS
(
SELECT
*
FROM
sys.sysprocesses AS S
WHERE
S.spid = @@SPID
AND S.program_name LIKE 'Microsoft SQL Server Management%'
)
BEGIN
ROLLBACK
END
END
但是,作为狡猾的小虫子的开发人员,然后将编写他们自己的.NET应用程序或使用SQLCMD,这样您就陷入了试图找出所有可能出现的program_name的麻烦之中。
相反,我将查看hostname
上的sys.sysprocesses
列-如果连接不是来自服务器本身,则拒绝连接。除非您必须与能够将RDP部署到服务器上的开发人员打交道。
哦,如果您破坏了登录触发器却拒绝了所有内容,请使用SQLCMD
以及专用的管理控制台,DAC和
sqlcmd.exe -S localhost -d master -Q "DISABLE TRIGGER ALL ON SERVER" -A