OPENROWSET是“生产安全”的方法吗?

问题描述

我正在使用大约5年前使用C#和mssql server 2000开发的桌面应用程序。 这个应用程序使用OPENROWSET加载一些xls文件,直到在我处理升级数据库(到诸如msserver 2019之类的数据库)的机构中正常工作,并且OPENTOWSET停止工作。

尽管知道有很多程序和方法可以解决此问题(我无法应用服务器上运行的coz数据库),但是我公司的DBA告诉我解决此问题的唯一方法是为应用程序提供admin-特权用户,由于安全规则,他无法执行此操作-将问题交给我。现在,我必须用其他东西替换OPENROWSET。

所以问题是:是真的吗? 熟练的DBA无法让OPENROWSET与普通/非管理员用户一起在远程DB上工作,从而解决有关权限和链接服务器的错误吗? OPENROWSET是否“足够成熟”才能使其在当今的生产服务器上运行?

解决方法

您似乎正在尝试从数据库中打开excel文件。在这种情况下,默认设置将不允许这样做:

https://docs.microsoft.com/en-us/sql/t-sql/functions/openrowset-transact-sql?view=sql-server-ver15#remarks

OPENROWSET可用于从OLE DB数据源访问远程数据 仅当DisallowAdhocAccess注册表选项明确设置为 指定的提供者为0,并且临时分布式查询 启用高级配置选项。如果没有这些选项 设置,默认行为不允许临时访问。

访问远程OLE DB数据源时,登录标识为 不会自动从服务器上委派受信任的连接 客户端连接到正在查询的服务器。 必须配置身份验证委派。

听起来这可能是以前为以前的数据库配置的,但是现在看到这一点的DBA认为这有点安全性问题。他是否正确,在很大程度上取决于您如何使用它,但这听起来确实可以避免。

最好在C#应用程序中加载excel文件,然后将BULK数据发送到sql服务器进行保存。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...