0

一対のCLRアセンブリがあり、繰り返し可能な実装スクリプトを作成しようとしています。両方のアセンブリにEXTERNAL権限セットが必要なため、非対称キーも含まれていますが、これらが問題を引き起こしています。2回目に実行すると、「キーをドロップできません。ログインはそれにマップされます」というエラーが表示されます。

私がこれに関して持っている他のいくつかのqは次のとおりです:データベースとサーバーレベルでログイン/キーが必要ですか?

現在、私のスクリプトは次のとおりです。

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

私がやったことが他にない場合は、私に知らせてください!

4

2 に答える 2

1

問題は次の行にあります...

IF EXISTS (SELECT * FROM sys.database_principals WHERE name = 'BaselCLRLogin')

間違ったシステムテーブルでログイン名を探しています!

sys.syslogins代わりにから選択してください。

IF EXISTS (SELECT * FROM sys.syslogins WHERE [sid] = SUSER_SID('BaselCLRLogin'))
    DROP LOGIN [BaselCLRLogin]
GO
于 2015-02-11T09:52:39.510 に答える
0

各アセンブリに異なるキーで署名する必要があります。

于 2012-09-11T10:14:09.347 に答える