首页 > 解决方案 > SQL Server 将图像导出到网络驱动器

问题描述

我们有一个将图像发送到 SQL 服务器表的应用程序。我为某个用户设置了一个 DSN,并在 SQL 登录中设置了该用户以具有这样做的权限。这没有任何问题。

图像由表触发器作为图像导出到本地驱动器。这也有效。

不工作的是导出到网络驱动器或另一个本地分区。

这是否需要该用户的任何 sql 权限或权限才能导出?如果是这样,为什么这是必要的,因为只要图像日期在表格中,在我的理解中用户不应该是相关的。

请帮助解决这个问题。迈克尔

标签: sql-serverpermissions

解决方案


这是否需要该用户的任何 sql 权限或权限才能导出?

它与“sql server/instance”权限(即 sql server 中的 sql 权限)、server&db securables 等无关。它与尝试写入目标目录/文件夹的“进程”的权限有关。

  1. 如果您的“特定用户”使用 Windows 身份验证(域\特定用户)连接/验证到 sql server,则 sql server 服务携带/通过特定用户的“域安全令牌”并将文件写入目录中,就像特定用户正在写入一样该目录(假设该目录位于同一域或另一个受信任的域中)。在这种情况下,如果 domain\certainuser 对该目录没有足够的权限,则写入将失败并拒绝访问。

2.如果您的“特定用户”使用 sql 身份验证(用户名和密码)连接到 sql server,则“特定用户”在 sql server 之外没有任何“存在”。当 sql 用户(== 特定用户)尝试访问外部资源(例如,写入目录)时,sql server 实例的服务帐户就会发挥作用,并且任何映射到“特定用户”sql 登录的凭据。

一个。如果 sql server 实例的服务帐户是域帐户(例如 domain\sqlsrvc),则此域帐户需要对外部资源/目录具有足够的权限。

湾。如果 sql server 实例的服务帐户是本地“机器(sql 实例正在运行)”的 windows 帐户,那么(假设本地机器帐户可以逃出本地机器的领域并访问网络/域)机器的 NetworkService 帐户需要访问外部资源/目录。机器的networkservice帐户是machinename$(例如,如果机器/计算机名称是PC123,那么networkservice帐户是PC123$)。将域资源的权限授予 machine$ 帐户是一种不好的安全做法,大多数系统管理员都会反对。

C。如果您不想打扰服务帐户,您可以创建一个 sql server 凭据并将该凭据映射到 sql login certainuser

CREATE CREDENTIAL sqlusertodomaincredential WITH IDENTITY = 'domain\acountX', SECRET = 'domain-password-of-accountX';
GO
ALTER LOGIN certainuser WITH CREDENTIAL = sqlusertodomaincredential;
GO

总结:

a.使用域帐户(domain\certainuser)连接到sql server并写入目录。

b.如果您不能这样做,请为域帐户创建一个凭据并将其映射到 sql 登录。

c.如果您不能这样做,请使用域帐户作为 sql server 服务帐户。

d.如果您无法执行上述任何操作,请与您的管理员联系,并询问是否允许为 machine$ networkservice 帐户授予外部资源的权限。


推荐阅读