Sql-Clr Исключение безопасности - PullRequest
0 голосов
/ 30 января 2012

Недавно я создал приложение, которое может получить пароль пользователя, чье имя пользователя указывается в качестве параметра, я проверил код, он работает нормально, теперь я создал библиотеку классов, чтобы я мог добавить это в сборке на сервере SQL 2008, ниже приведен код моей библиотеки классов.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Security;

public class DnnUserCredentials
{
    public static string GetUserPassword(string username)
    {
        MembershipUser objUser = Membership.GetUser(username);
        return objUser.GetPassword();
    }
}

Я создал сборку в SQL Server 2008, как показано ниже

CREATE ASSEMBLY DNN_USER_CREDENTIALS FROM 'E:\NBM SITES\SqlProjectDll (DO NOT DELETE)\UserCredentials.dll' WITH PERMISSION_SET = SAFE

я получил команду успешно завершено сообщение, затем я создал функцию, как показано ниже:

ALTER FUNCTION [dbo].[fn_UserCredentials](@UserName [nvarchar](max))
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER
AS 
EXTERNAL NAME [DNN_USER_CREDENTIALS].[DnnUserCredentials].[GetUserPassword]

и здесь я получил сообщение об успешном завершении команды, теперь, когда я пытался вызвать функцию, используя

SELECT [dbo].[fn_UserCredentials]('host')

выдает мне ошибку ниже:

A .NET Framework error occurred during execution of user-defined routine or aggregate "fn_UserCredentials": 
System.Security.SecurityException: Request for the permission of type 'System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
System.Security.SecurityException: 
   at DnnUserCredentials.GetUserPassword(String username)

любые решения.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2013

Вам необходимо установить PERMISSION_SET = UNSAFE , чтобы получить доступ к удаленным ресурсам. Также вы можете установить флаг TRUSTWORTHY в положение ON.

ALTER [<DBName>] SET TRUSTWORTHY ON
GO
CREATE ASSEMBLY [<assemblyName>]
--user with sysadmin rights for this DB may be required for deploing
AUTHORIZATION [<someSysadmin>]
FROM '[<pathToDll>]'
--compiled with unsafe to access EventLog for example
WITH PERMISSION_SET = UNSAFE
GO
0 голосов
/ 31 января 2012

Не уверен, в чем может быть проблема.Сначала попытайтесь изменить PERMISSION_SET на Неограниченный.Если это не помогает, попробуйте отладить DLL из Visual Studio.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...