sqlserver创建程序集

适用对象: SQL ServerAzure SQL 数据库Azure SQL 数据仓库并行数据仓库

托管数据库对象(如存储过程或触发器)先经过编译,然后部署到称为程序集的单元中。 托管的 DLL 程序集必须在注册MicrosoftSQL Server才能使用该程序集提供的功能。 若要在 SQL Server 数据库中注册程序集,请使用 CREATE ASSEMBLY 语句。 本主题讨论如何使用 CREATE ASSEMBLY 语句在数据库中注册程序集,以及如何为程序集指定安全设置。

CREATE ASSEMBLY 语句

CREATE ASSEMBLY 语句用于在数据库中创建程序集。 以下是示例:

复制
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';

FROM 子句指定要创建的程序集的路径名。 此路径既可以是通用命名约定 (UNC) 路径,也可以是计算机本地的物理文件路径。

SQL Server 不允许使用相同的名称、区域性和公钥来注册程序集的不同版本。

可以创建引用其他程序集的程序集。 当在 SQL Server 中创建程序集时,SQL Server 还将创建由根级别程序集引用的程序集(如果尚未在数据库中创建被引用程序集)。

将向数据库用户或用户角色授予在数据库中创建进而拥有程序集的权限。 为了创建程序集,数据库用户或角色应具有 CREATE ASSEMBLY 权限。

仅当满足以下条件时,程序集才能成功地引用其他程序集:

  • 所调用或被引用的程序集由同一个用户或角色所有。

  • 所调用或被引用的程序集是在同一个数据库中创建的。

创建程序集时指定安全性

创建程序集时SQL Server数据库,可以指定三个不同的代码可以在其中运行的安全级别之一:安全, EXTERNAL_ACCESS,或UNSAFE。 当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 程序集

EXTERNAL_ACCESS解决了该代码需要访问服务器,例如文件、 网络、 注册表和环境变量以外的资源的方案。 只要服务器访问外部资源,它就会模拟调用托管代码的用户的安全上下文。

不安全代码权限是用于这些情况下,程序集不是可验证为安全或要求进一步访问受限资源,如MicrosoftWin32 API。

若要创建EXTERNAL_ACCESS或UNSAFE中的程序集SQL Server,必须满足以下两个条件之一:

  1. 程序集经过了强名称签名或使用证书进行了 Authenticode 签名。 此强名称 (或证书) 内创建SQL Server作为非对称密钥 (或证书),并且具有与相应的登录名EXTERNAL ACCESS ASSEMBLY权限 (对于外部访问程序集) 或UNSAFE ASSEMBLY权限 (对于不安全的程序集)。

  2. 数据库所有者 (DBO) 拥有EXTERNAL ACCESS ASSEMBLY (对于外部访问程序集) 或UNSAFE ASSEMBLY (对于UNSAFE程序集) 的权限,并且数据库已TRUSTWORTHY 数据库属性设置为ON。

期待您的反馈 :如果在本文中发现过时或不正确的内容(如步骤或代码示例),请告诉我们。 可以单击此页底部的“反馈” 部分中的“本页” 按钮。 我们通常在第二天阅读有关 SQL 的每项反馈。 谢谢。

在加载程序集(包括执行)时,也将检查上面所列的两个条件。 至少必须满足这些条件之一才能加载程序集。

我们建议TRUSTWORTHY 数据库属性在数据库上不是设置为ON仅将运行公共语言运行时 (CLR) 代码,在服务器进程中。 而是建议在 master 数据库中通过程序集文件创建非对称密钥。 然后,必须创建映射到此非对称密钥的登录名,并且必须授予该登录名EXTERNAL ACCESS ASSEMBLY或UNSAFE ASSEMBLY权限。

以下Transact-SQL语句将执行创建非对称密钥,将登录名映射到此密钥,然后授予所需的步骤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 EXTERNAL ACCESS ASSEMBLY TO SQLCLRTestLogin;
GO

备注

必须创建新的登录名以与非对称密钥关联。 此登录名仅用于授予权限;不必与用户关联或在应用程序中使用。

若要创建外部访问程序集,创建者需要具有外部访问权限。 此权限在创建程序集时指定:

复制
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;

以下Transact-SQL语句将执行创建非对称密钥,将登录名映射到此密钥,然后授予所需的步骤UNSAFE到登录名的权限。 必须运行以下 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 集成安全性。

请参阅

管理 CLR 集成程序集 
更改程序集 
删除程序集 
CLR 集成代码访问安全性 
TRUSTWORTHY 数据库属性 
允许部分可信任的调用方

转载于:https://www.cnblogs.com/buffercache/p/11446231.html

sqlserver创建程序集相关推荐

  1. 手工部署Sqlserver CLR程序集

    以前一直用VS部署Sqlserver CLR程序集简单省事,现在服务器部署在内网了,必须手动更新部署Sqlserver CLR程序集.     开始以为ALTER ASSEMBLY [程序集名称] F ...

  2. SQLServer创建用户自定义数据库用户

    创建用户自定义数据库用户注意事项 如果已忽略 FOR LOGIN,则新的数据库用户将被映射到同名的SQL Server登录名. 默认架构将是服务器为此数据库用户解析对象名时将搜索的第一个架构. 除非另 ...

  3. SQLSERVER 创建ODBC 报错的解决办法 SQLState:‘01000‘的解决方案

    SQLSERVER 创建ODBC 报错的解决办法 SQLState:'01000'的解决方案 参考文章: (1)SQLSERVER 创建ODBC 报错的解决办法 SQLState:'01000'的解决 ...

  4. oracle、sqlserver创建表、删除表、创建索引的sql

    ----oracle创建表          create table TEST_TABLE01 (                comp_code            varchar2(20) ...

  5. 为什么sqlserver创建存储过程成功,却找不到这个存储过程呢

    1.为什么sqlserver创建存储过程成功,却找不到这个存储过程呢? 需要点击工具上,创建存储过程,在那个里面去写存储过程,然后再刷新存储过程就会出现了 注意:如果是在新建查询上面,直接写sql创建 ...

  6. sqlServer创建数据库并指定mdf,ldf文件所在路径

    sqlServer创建数据库并指定mdf,ldf文件所在路径 CREATE DATABASE [dataBaseName]CONTAINMENT = NONEON PRIMARY ( NAME = N ...

  7. sqlserver 创建存储过程及基本语法

    本文记录sqlserver 创建存储过程及基本语法的讲解,附上作者实现功能的实例 背景:作者的task是需要两个数据库之间进行数据迁移,本可以用java程序来实现,后面觉得可以学习下存储过程,故采用这 ...

  8. sqlserver 创建登录名报错:‘User, group, or role ‘arms‘ already exists in the current database‘

    sqlserver 创建登录名报错如下图 这是因为sqlserver分为用户和登录名, navicate登录需要登录名.一般我们在单节点创建登录名会sqlserver同时会在数据库里创建用户名,二者关 ...

  9. sqlserver创建表命令create table

    Sqlserver 创建表命令 create table关键字 create table关键字 create table dept( dept_id int constraint pk_dept_id ...

最新文章

  1. Windows Phone 7 程序菜单栏ApplicationBar
  2. 大数据WEB阶段(六)MySql 下载、安装、卸载与配置
  3. 从网页监听Android设备的返回键
  4. 我们通过一个服务器程序,以研究backlog参数对listen系统调用的影响,运行截图如下...
  5. 注册表清理工具PC Performer
  6. Python入门之经典练习题
  7. Windows重新生成UEFI引导,解决Windows蓝屏\BCD 0xc0000098
  8. 再见beycond comapre,适合程序员使用的免费文件对比工具——CCompare1.14
  9. [游戏]求生之路超级专家难度模式
  10. tp5.1 系统常量
  11. Maven filter 导致打包以后的excel文件损坏的问题
  12. 最小二乘支持向量机(lssvm)回归预测(matlab)
  13. Axure AxureRP9 密钥
  14. 微软2013暑假实习生笔试题解析
  15. git、github保姆级教程(手把手交)以及如何在github上提交pr,参与开源项目
  16. rabbitMq用guest登录失败解决办法
  17. 【心电检测】基于 EMD、CEEMDAN 算法实现呼吸心跳信号检测实例(去除呼吸旁瓣干扰,测量心跳频率)附matlab代码
  18. Android 使用shape实现虚线或者虚线框
  19. EDT(异地通)区块链技术将极大影响的全行业,其中包括支付行业。
  20. “瞎买量”时代终结,游戏运营推广该如何选择?

热门文章

  1. CVPR 2019 论文大盘点—人体姿态篇
  2. CVPR 2019 | 条件运动传播:从运动中学习物体性质
  3. oracle1007错误,【问题处理】偶遇ORA- 01075: you are currently logged on错误
  4. 《python透明人士,他是凭什么成为主流编程的宠儿?!》Python基础
  5. 崩坏3人物模型详解—是次世代还是手绘?
  6. 收藏 | 详解PyTorch中的ModuleList和Sequential
  7. 深度学习论文阅读进阶路径图
  8. VGG和GoogLeNet inception
  9. 常用机器学习算法优缺点及其应用领域
  10. Python-cvxopt库的使用(1)(解决LP问题)