并行数据仓库
本主题讨论如何使用 CREATE ASSEMBLY 语句在数据库中注册程序集,以及如何为程序集指定安全设置。
CREATE ASSEMBLY 语句
以下是示例:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';
此路径既可以是通用命名约定 (UNC) 路径,也可以是计算机本地的物理文件路径。
不允许使用相同的名称、区域性和公钥来注册程序集的不同版本。
SQL Server 还将创建由根级别程序集引用的程序集(如果尚未在数据库中创建被引用程序集)。
为了创建程序集,数据库用户或角色应具有 CREATE ASSEMBLY 权限。
仅当满足以下条件时,程序集才能成功地引用其他程序集:
-
所调用或被引用的程序集由同一个用户或角色所有。
-
所调用或被引用的程序集是在同一个数据库中创建的。
创建程序集时指定安全性
CodePlex。
若要指定给定的安全级别,您可以按如下所示修改 CREATE ASSEMBLY 语句的语法:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = SAFE;
还有可能创建具有的程序集安全权限集通过只省略上述代码的第三行:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';
当程序集中的代码下运行时安全权限设置,它只可以执行计算和通过进程内托管提供程序服务器内的数据访问。
创建 EXTERNAL_ACCESS 和 UNSAFE 程序集
只要服务器访问外部资源,它就会模拟调用托管代码的用户的安全上下文。
MicrosoftWin32 API。
SQL Server,必须满足以下两个条件之一:
-
SQL Server作为非对称密钥 (或证书),并且具有与相应的登录名EXTERNAL ACCESS ASSEMBLY权限 (对于外部访问程序集) 或UNSAFE ASSEMBLY权限 (对于不安全的程序集)。
-
TRUSTWORTHY 数据库属性设置为ON。
谢谢。
至少必须满足这些条件之一才能加载程序集。
然后,必须创建映射到此非对称密钥的登录名,并且必须授予该登录名EXTERNAL ACCESS ASSEMBLY或UNSAFE ASSEMBLY权限。
Transact-SQL 语句,然后才能运行 CREATE ASSEMBLY 语句。
USE master;
GO
CREATE ASYMMETRIC KEY SQLCLRTestKey FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll'
CREATE LOGIN SQLCLRTestLogin FROM ASYMMETRIC KEY SQLCLRTestKey
GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRTestLogin;
GO
备注
此登录名仅用于授予权限;不必与用户关联或在应用程序中使用。
此权限在创建程序集时指定:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
Transact-SQL 语句,然后才能运行 CREATE ASSEMBLY 语句。
USE master;
GO
CREATE ASYMMETRIC KEY SQLCLRTestKey FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll';
CREATE LOGIN SQLCLRTestLogin FROM ASYMMETRIC KEY SQLCLRTestKey ;
GRANT UNSAFE ASSEMBLY TO SQLCLRTestLogin ;
GO
指定程序集加载与UNSAFE权限,则指定UNSAFE时程序集加载到服务器权限集:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = UNSAFE;
CLR 集成安全性。
请参阅
允许部分可信任的调用方