【问题标题】:SQL Server export images to network drivesSQL Server 将图像导出到网络驱动器
【发布时间】:2020-01-13 10:20:34
【问题描述】:

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

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

不能导出到网络驱动器或另一个本地分区。

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

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

【问题讨论】:

  • 如果 SQL Server 正在“导出”到网络位置,则 SQL Server 服务帐户需要访问该位置。 旁注,在TRIGGER 中导出图像听起来是个坏主意。触发器应该是最小的,并且将某些内容保存到磁盘可能会产生相当大的开销。此外,如果保存失败,无论出于何种原因,DML 语句也会失败;这意味着您的 INSERT/UPDATE/DELETE 语句将被回滚。如果您需要在 DML 语句上执行事件,最好将信息放入另一个表中,并让常规任务完成这项工作(或者根本不使用 SQL)。跨度>
  • 谢谢。图像最大只有大约 500 KB。您导出到另一个表然后导出的评论是一个很好的输入。我会这样做的。但由于这是一个 AFTER_INSERT 触发器,我认为不会对存储的数据产生任何影响。
  • 愚蠢的问题:写入网络驱动器需要什么或哪些 SQL Server 服务帐户??
  • 在服务中找到您的 SQL Server 实例。您将在“登录身份”列中看到该帐户
  • 您(以及 DBA)定义运行 SQL Server 的服务帐户,网络管理员(使用您/DBA 的输入)定义它在网络上拥有的权限和共享权限。这不是这里的用户告诉你的,它总是特定于工作场所的。/

标签: sql-server permissions


【解决方案1】:

这是否需要该用户的任何 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),则此域帐户需要对外部资源/目录具有足够的权限。

b.如果 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 帐户。

【讨论】:

  • 谢谢。正如我们遇到的情况 2。我们将其传递给我们的管理员,因为我们需要按照描述进行设置。
猜你喜欢
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 2016-08-16
相关资源
最近更新 更多