Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Active Directory средствами CLR  [new]
МСУ фбане
Guest
YaNN
МСУ фбане

Т.е., Вы хотите авторизоваться в АД силой мысли? :)

я хочу авторизовываться так же как из консолного или winforms приложения - там не надо явно указывать авторизационные данные - все работает.

Да, чувствую от Вас просто так не омазаться :)
Сделаю перегрузку метода, хорошо :)
11 дек 08, 08:27    [6554217]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
YaNN
Member

Откуда: N.Novgorod
Сообщений: 162
МСУ фбане,

т.е. признаете, что сквозной авторизации нет? :)
нет предложений как ее можно сделать?
11 дек 08, 17:27    [6558440]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
МСУ фбане
Guest
2 способа:

1. Который есть уже - через сквозную авторизацию
2. И через:

new DirectoryEntry("WinNT://" + Environment.MachineName)

Будет время, напишу :)

[Posted by 10.0.0.82 via http://webwarper.net This is added while posting a message to avoid misuse.
Try: http://webwarper.net/webwarper.exe Example of viewing: http://webwarper.net/ww/~av/sql.ru/forum/actualthread.aspx?tid=586346&pg=2 ]
11 дек 08, 19:13    [6559101]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
YaNN
Member

Откуда: N.Novgorod
Сообщений: 162
МСУ фбане
2 способа:

1. Который есть уже - через сквозную авторизацию
2. И через:

new DirectoryEntry("WinNT://" + Environment.MachineName)

Будет время, напишу :)

[Posted by 10.0.0.82 via http://webwarper.net This is added while posting a message to avoid misuse.
Try: http://webwarper.net/webwarper.exe Example of viewing: http://webwarper.net/ww/~av/sql.ru/forum/actualthread.aspx?tid=586346&pg=2 ]

просто проблема в самом деле не в перегрузке, я сам давно переписал либу с похожей функциональностью, проблему которую я хотел решить: сквозная авторизация.

по пункту 1. у вас, я так понимаю, прямая авторизация на LDAP сервер, с явным указанием пользователя/пароля и смотря на пункт 2 я догадываюсь, что у вас контроллер домена и sql сервер на одной физической машине. Вероятно поэтому у вас проходило указание в конструкторе DirectoryEntry null для пользователя и пароля.
Меня интересует вариант, когда Ldap сервер находиться не на одной физической машине с SQL сервером.
11 дек 08, 21:34    [6559459]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
МСУ фбане
Guest
YaNN
я догадываюсь, что у вас контроллер домена и sql сервер на одной физической машине. Вероятно поэтому у вас проходило указание в конструкторе DirectoryEntry null для пользователя и пароля.

Упаси Бог :) У меня контролеер домена и сиквел, разумеется, разнесены. И всё прекрасно работает.

YaNN
Меня интересует вариант, когда Ldap сервер находиться не на одной физической машине с SQL сервером.

Ну CLR же работает, если Вы указываете пароль. И осталные процедуры работают без указания пароля.

Просто мне нужно подкорректировать все процедуры: если логин пароль указан в параметрах, значит пляшем от него. Если не указан - пытаемся авторизоваться в АД от текущего залогиненного юзверя. Думаю, это будето самое верное решение.
11 дек 08, 21:58    [6559519]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Active Directory средствами CLR  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
я извиняюсь за весьма ламерский вопрос...
у меня
exec GetAllADDomainGroups 'mydomain'
возвращает не верный collate в виде знаков вопросов...
как быть? как фиксить проблему?
спасибо
29 сен 10, 12:03    [9521401]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
SERVERPROPERTY('collation')

?
29 сен 10, 14:49    [9523307]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
МСУ,

Cyrillic_General_CI_AS
29 сен 10, 14:54    [9523358]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
А GetAllADDomainUsers выдаёт нормальную кодировку?
29 сен 10, 15:00    [9523433]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
МСУ
А GetAllADDomainUsers выдаёт нормальную кодировку?

у нас все логины английскими символами, потому тут всё в порядке
29 сен 10, 15:01    [9523452]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Понял, в DLL юзается такие метаданные:

SqlMetaData data = new SqlMetaData("Groups", SqlDbType.VarChar, 250L);

Ну что, нужно бы пересобрать DLL с SqlDbType.NVarChar, смогёте? :)
29 сен 10, 15:02    [9523467]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
МСУ,
а вот
exec GetAllADDomainGroups 'mydomain'
тоже лажу возвращает некоторую знаками вопросов :(
29 сен 10, 15:02    [9523476]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
МСУ,

смогу, только пожалуйста... дайте полный код ДЛЛ, ато в топе только три процедуры, а прим еры на use уже аж шесть процедур ;)
а я сам собиру дллку
спасиба
29 сен 10, 15:04    [9523491]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Могли бы рефлектором взломать :)

P.S. В аттаче проект, большая просьба, выложить проект после сакцэсса )

К сообщению приложен файл (ADLibrary.zip - 31Kb) cкачать
29 сен 10, 15:13    [9523570]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
МСУ,

спасибо за длл, рефлектом не научился еще
и всё ж прошу код, потому как хочу изменить результат процедуры
EXEC GetAllADDomainUsers 'mydomain'
чтобы получать логин и фио пользователя
а совести просить внести изменения в код - не хватает
спасибо
мой мыл:
SELECT CONVERT(VARCHAR(50), 0x53484B6F646572406D61696C2E7275)
спасиба огромнейшее
29 сен 10, 15:18    [9523613]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
МСУ,

а, всё... спасибо, нашел
благодарствую
29 сен 10, 15:19    [9523621]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
SHKoder
чтобы получать логин и фио пользователя

А зачем что-то править, есть же процедура GetUserProperties :)
Просто нужно её применить для перечня пользователей в запросе.

P.S. Можно, конечно, и написать отдельную хп, но тут уж сами смотрите. Просто GetUserProperties универсальна.
P.S2. Если будете писать:
1. Убрать фильтр searcher.PropertiesToLoad.Add("samaccountname");
2. В SearchResult result = results[i] заюзать string cn = result.Properties["cn"][0].ToString();
29 сен 10, 15:31    [9523730]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
МСУ,

есть асько? ато я чувствую проблемы могут возникнуть у меня на ровном местя, я увы не шибком то шарпист
SELECT 
CONVERT(VARCHAR(100),0x53484B6F646572406D61696C2E7275) AS email,
CONVERT(VARCHAR(100),0x32373832383239) AS icq
благодарю множество разззз
29 сен 10, 15:46    [9523868]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
SHKoder, все остальные вопросы по работе с AD средствами .NET - сюда.
29 сен 10, 15:56    [9523988]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
SHKoder, устал уже от Вас, проще написать самому - наслаждайтесь :)

+ Регистрация
ALTER DATABASE Test SET TRUSTWORTHY ON
GO

CREATE ASSEMBLY [DirectoryServices]
FROM 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.DirectoryServices.dll'
WITH PERMISSION_SET = UNSAFE
GO

CREATE ASSEMBLY [ADLibrary] 
FROM 'C:\ADLibrary.dll'
WITH PERMISSION_SET = UNSAFE 
GO

CREATE PROCEDURE GetUserProperties (@userName sysname, @domain sysname)
AS EXTERNAL NAME [ADLibrary].[ADLibrary.ADLibraryClass].[GetUserProperties]
GO

CREATE PROCEDURE GetAllADDomainUsers (@domain sysname)
AS EXTERNAL NAME [ADLibrary].[ADLibrary.ADLibraryClass].[GetAllADDomainUsers]
GO

CREATE PROCEDURE SetADProperty (@domain sysname, @userName sysname, @password sysname, @property sysname, @value sysname)
AS EXTERNAL NAME [ADLibrary].[ADLibrary.ADLibraryClass].[SetADProperty]
GO

CREATE PROCEDURE GetAllADDomainGroups (@domain sysname)
AS EXTERNAL NAME [ADLibrary].[ADLibrary.ADLibraryClass].[GetAllADDomainGroups]
GO

CREATE PROCEDURE GetAllADUsersInGroup (@domain sysname, @groupName sysname)
AS EXTERNAL NAME [ADLibrary].[ADLibrary.ADLibraryClass].[GetAllADUsersInGroup]
GO

CREATE PROCEDURE GetAllADGroupsInUser (@domain sysname, @userName sysname)
AS EXTERNAL NAME [ADLibrary].[ADLibrary.ADLibraryClass].[GetAllADGroupsInUser]
GO

CREATE PROCEDURE GetAllADDomainUsersEx (@domain sysname)
AS EXTERNAL NAME [ADLibrary].[ADLibrary.ADLibraryClass].[GetAllADDomainUsersEx]
GO


DECLARE @domain SYSNAME
SELECT @domain = SUBSTRING(SYSTEM_USER, 1, PATINDEX('%\%', SYSTEM_USER) - 1)

EXEC GetAllADDomainUsersEx @domain 


К сообщению приложен файл (ADLibrary.dll - 14Kb) cкачать
1 окт 10, 12:03    [9535950]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
МСУ,

Линдгрен Астрид(с)
Случилось ЧУДО!!! друг спас жизнь ДРУГА!!!
а у Вас там исходничка случаем нету?

пасип
1 окт 10, 12:21    [9536195]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
SHKoder
а у Вас там исходничка случаем нету?

Всё, что добавил к прошлому проекту:

+ сурсе


public class UserEx : IComparable<UserEx>
{
    public int CompareTo(UserEx other)
    {
        return sAMAccountName.CompareTo(other.sAMAccountName);
    }

    public string sAMAccountName { get; set; }
    public string name { get; set; }
    public string cn { get; set; }
    public string sn { get; set; }
    public string displayName { get; set; }
    public string givenName { get; set; }
    public string mail { get; set; }
}

private static string GetUserExValue(SearchResult result, string key)
{
    return result.Properties.Contains(key) ? result.Properties[key][0].ToString() : string.Empty;
}

/// <summary>
/// Получить список пользователей
/// </summary>
/// <param name="domain"></param>
/// <returns></returns>
[SqlProcedure]
public static int GetAllADDomainUsersEx(string domain)
{
    List<UserEx> allUsers = new List<UserEx>();

    try
    {
        using (DirectoryEntry searchRoot = GetDirectoryEntry(domain))
        using (DirectorySearcher search = new DirectorySearcher(searchRoot))
        {
            search.Filter = "(&(objectClass=user)(objectCategory=person))";

            SearchResultCollection resultCol = search.FindAll();

            if (resultCol == null)
                return 0;

            for (int counter = 0; counter < resultCol.Count; counter++)
            {
                SearchResult result = resultCol[counter];

                UserEx user = new UserEx();

                user.sAMAccountName = GetUserExValue(result, "sAMAccountName");
                user.name = GetUserExValue(result, "name");
                user.cn = GetUserExValue(result, "cn");
                user.sn = GetUserExValue(result, "sn");
                user.displayName = GetUserExValue(result, "displayName");
                user.givenName = GetUserExValue(result, "givenName");
                user.mail = GetUserExValue(result, "mail");

                allUsers.Add(user);
            }

            allUsers.Sort();

            SqlDataRecord record = new SqlDataRecord(new SqlMetaData[] 
            {
                new SqlMetaData("sAMAccountName", SqlDbType.NVarChar, 4000),
                new SqlMetaData("name", SqlDbType.NVarChar, 4000),
                new SqlMetaData("cn", SqlDbType.NVarChar, 4000),
                new SqlMetaData("sn", SqlDbType.NVarChar, 4000),
                new SqlMetaData("displayName", SqlDbType.NVarChar, 4000),
                new SqlMetaData("givenName", SqlDbType.NVarChar, 4000),
                new SqlMetaData("mail", SqlDbType.NVarChar, 4000),
            });


            SqlContext.Pipe.SendResultsStart(record);

            foreach (UserEx user in allUsers)
            {
                record.SetValues(
                    user.sAMAccountName,
                    user.name,
                    user.cn,
                    user.sn,
                    user.displayName,
                    user.givenName,
                    user.mail
                );
                SqlContext.Pipe.SendResultsRow(record);
            }

            SqlContext.Pipe.SendResultsEnd();

            return 1;
        }
    }
    catch (Exception ex)
    {
        SqlContext.Pipe.Send(ex.Message);
        return -1;
    }
}
1 окт 10, 12:36    [9536392]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Продолжение тут: Active Directory via T-SQL
4 окт 10, 14:19    [9548747]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
Scheduler
Member

Откуда:
Сообщений: 61
Добрый день, подскажите пожалуйста в таком вопросе.
Вот я например хочу изменить свойство в АД у обычного пользователя, в userName я передаю логин этого пользователя, А чей пароль я должен в параметр password передавать. Если я указываю пароль доменного админа, то выдается ошибка, что пользователь не определен в системе, если пароль пользователя, то по понятным причинам access denied.
[dbo].[SetADProperty] 
@domain=@Domain
,@userName=@sAMAccountName
,@password=''
,@property='homeDirectory'
,@value = @homeFolderNew
Может я что-то не догоняю, но получается, что изменить свойство AD может только Админ и только для себя????!!!!!
2 дек 10, 13:27    [9874977]     Ответить | Цитировать Сообщить модератору
 Re: Active Directory средствами CLR  [new]
Scheduler
Member

Откуда:
Сообщений: 61
Sorry, Вопрос отпал
2 дек 10, 15:03    [9875841]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить