我需要编写一个SQLCLR函数来访问外部文件。我通过将trustworthy on
提供给我的数据库来完成它。有没有其他方法可以在不提供trustworthy on
的情况下访问外部资源? SQLCLR实施的可靠数据库是否存在任何风险?
答案 0 :(得分:3)
存在风险,但如果您控制数据库中存在的所有代码,则风险很小。如果您对程序集使用external_access或不安全权限,则需要将可信任设置为on,否则SQL服务器实际上不会信任您的代码,也不会让它超出实例。
以下是Microsoft的链接,详细说明了设置可信标志的一些准则:
Guidelines for using the TRUSTWORTHY database setting in SQL Server
答案 1 :(得分:2)
为了避免TRUSTWORTHY ON
访问外部资源的数据库,请遵循以下过程:
USE MASTER;
CREATE ASYMMETRIC KEY '<youKeyName>' FROM EXECUTABLE FILE = '<Your dll file path>';
CREATE LOGIN '<yourUserName>' FROM ASYMMETRIC KEY '<yourKeyName>';
GRANT EXTERNAL ACCESS ASSEMBLY TO '<yourUserName>';
USE '<YOUR DB NAME>';
CREATE ASSEMBLY '<Assembly name>' FROM '<Your dll file path>'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
试试这个:) -