首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server CLR程序集可重复实现顺序?

SQL Server CLR程序集可重复实现顺序?
EN

Stack Overflow用户
提问于 2012-09-11 17:46:52
回答 2查看 1.7K关注 0票数 0

我有一对CLR程序集,并且我正在尝试创建一个可重复的实现脚本。这两个程序集都需要外部权限集,所以我还涉及到了非对称密钥,这些都会导致问题。因为当你第二次运行它时,你得到了'Cannot drop key,login mapped to it‘错误。

我对此提出的其他一些问题是:我是否需要在数据库和服务器级别上的登录/密钥?

目前我的脚本是:

代码语言:javascript
复制
USE master
GO 

IF EXISTS (SELECT * FROM sys.database_principals WHERE name = 'BaselCLRLogin')
    DROP LOGIN [BaselCLRLogin]
GO

IF EXISTS (SELECT * FROM sys.asymmetric_keys WHERE name = 'BaselCLRKey')
    DROP ASYMMETRIC KEY [BaselCLRKey]
GO

USE [BaselST]
GO

IF EXISTS (SELECT * FROM sys.objects WHERE OBJECT_ID = OBJECT_ID('clr.CheckFileFormat'))
    DROP PROCEDURE clr.CheckFileFormat
GO

IF  EXISTS (SELECT * FROM sys.database_principals WHERE name = N'BaselCLRLogin')
    DROP USER [BaselCLRLogin]
GO

IF  EXISTS (SELECT * FROM sys.assemblies asms WHERE asms.name = N'BaselCLR' and is_user_defined = 1)
    DROP ASSEMBLY [BaselCLR]
GO

IF EXISTS (SELECT * FROM sys.asymmetric_keys WHERE name = 'BaselCLRKey')
    DROP ASYMMETRIC KEY [BaselCLRKey]
GO

USE master
GO 

-- First Create the Asymmetric Key from the Assembly
CREATE ASYMMETRIC KEY BaselCLRKey
FROM EXECUTABLE FILE = 'D:\BASEL\BS_Assemblies\BaselCLR.dll'
GO

-- Create the Login from the Asymmetric Key
CREATE LOGIN BaselCLRLogin FROM ASYMMETRIC KEY BaselCLRKey
GO

-- Grant the External Access Priviledge to the Login
GRANT EXTERNAL ACCESS ASSEMBLY TO BaselCLRLogin
GO

USE [BaselST] 
GO

IF NOT EXISTS(SELECT * FROM sys.schemas WHERE name = 'clr')
    EXEC ('CREATE SCHEMA [clr]')
GO

-- Add a database user in the SQLCLR_Net Database for the Login
CREATE USER [BaselCLRLogin] FOR LOGIN [BaselCLRLogin]
GO

CREATE ASSEMBLY BaselCLR
FROM 'D:\BASEL\BS_Assemblies\BaselCLR.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS
GO

CREATE PROCEDURE clr.CheckFileFormat(
    @fileName nvarchar(255)
    , @seperator nvarchar(1)
    , @lineTerminator tinyint
    , @encoding tinyint
    , @headerFieldCount int
    , @bodyFieldCount int
    , @footerFieldCount int
    , @reason nvarchar(max) out)
AS
EXTERNAL NAME BaselCLR.StoredProcedures.CheckFileFormat
GO

如果我还做了什么不,不,请让我知道!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-11 17:52:40

问题出在下面这行……

代码语言:javascript
复制
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = 'BaselCLRLogin')

您在错误的系统表中查找登录名!

改为从sys.syslogins中选择。

代码语言:javascript
复制
IF EXISTS (SELECT * FROM sys.syslogins WHERE [sid] = SUSER_SID('BaselCLRLogin'))
    DROP LOGIN [BaselCLRLogin]
GO
票数 1
EN

Stack Overflow用户

发布于 2012-09-11 18:14:09

必须使用不同的密钥对每个程序集进行签名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12366979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档