我目前正在使用此查询来确定SQL是否具有权限,
EXEC master.dbo.xp_fileexist'\ servername \ sharename'
但是此查询正在以我登录的用户身份运行,是否有任何方法可以将其作为SQL代理服务帐户执行以检查该用户是否具有访问权限?
答案 0 :(得分:0)
据我所知,sql_agent
在system\NetworkService
帐户下运行,并且无权访问UNC路径(或)其他计算机。
您可以转到sql_agent
或control panel -> services
更改运行Sql server configuration manager
的帐户。
答案 1 :(得分:0)
以下脚本可以帮助您:
USE master
GO
DECLARE @ServiceAcct sysname, @Path as varchar(256)
SET @Path = '\\UNC\Path\To\Test\Access'
EXECUTE dbo.xp_instance_regread
@rootkey = N'HKEY_LOCAL_MACHINE',
@key = N'SYSTEM\CurrentControlSet\Services\MSSQLServer',
@value_name = N'ObjectName',
@value = @ServiceAcct OUTPUT
EXECUTE AS LOGIN = @ServiceAcct;
EXEC master.dbo.xp_fileexist @Path
EXECUTE master.dbo.xp_instance_regread
@rootkey = N'HKEY_LOCAL_MACHINE',
@key = N'SYSTEM\CurrentControlSet\Services\SQLServerAgent',
@value_name = N'ObjectName',
@value = @ServiceAcct OUTPUT
EXECUTE AS LOGIN = @ServiceAcct;
EXEC master.dbo.xp_fileexist @Path
答案 2 :(得分:0)
我希望Rahul该代理无法读取UNC路径。我将SQL Agent Service更改为在域的一部分服务帐户下运行。 https://docs.microsoft.com/en-us/sql/ssms/agent/set-service-startup-account-sql-server-agent-sql-server-configuration-manager?view=sql-server-2017