CLR 어셈블리 쌍을 가지고 있으며 반복 가능한 구현 스크립트를 만들려고합니다. 두 어셈블리 모두 EXTERNAL 권한 집합이 필요하므로 비대칭 키가 관련되어있어 문제가 발생합니다. 두 번째로 실행하면 '키를 삭제할 수 없습니다. 로그인이 잘못되었습니다'오류가 발생합니다.SQL Server CLR 어셈블리 반복 가능한 구현?
내가 가지고있는 기타 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
, 아니 이제 알려주세요!
dll 파일에서 키를 만들지 않았습니까? 즉 두 개의 분리 된 다른 키가있을 것입니다. 두 번의 로그인이 있지만 어셈블리는 스키마를 공유합니다. 나는 단지 하나의 dll btw에 대한 스크립트를 보여 줬습니다. – cjb110