Отключить Sql Server для входа в Windows? - PullRequest
0 голосов
/ 30 октября 2011

В целях безопасности я удаляю все роли сервера из каждого логина в базе данных и оставляю только "sa":

        //Get all server info for this instance
        Server oServer = new Server(@"YAHYA-PC\SQLEXPRESS");

        //Get all logins
        var users = oServer.Logins;
        //Get all server roles in the current instance
        ServerRoleCollection oServerCollection = oServer.Roles;
        //foreach login name drop all roles 
        foreach (Login oLogin in users)
        {
            if (oLogin.Name != "sa")
            {
                foreach (ServerRole oRole in oServerCollection)
                {
                    if (oRole.Name != "public")
                    {
                        oRole.DropMember(oLogin.Name);
                    }
                }
            }
        }

Сначала это был успех, но после запуска кода дляво второй раз выясняется, что объект Server подключается через Sql Windows Authentication, поэтому он продолжает выдавать мне исключение, поскольку я пропустил все роли сервера в учетной записи Sql Windows.Есть ли какой-либо возможный способ подключения объекта Server через Sql Server Account Login?

Редактировать с ответом:

ServerConnection oConnection = new ServerConnection (@ "ServerInstance", "UserName", "Пароль ");
Сервер oServer = новый сервер (oConnection);

Ответы [ 3 ]

1 голос
/ 30 октября 2011

В целях безопасности я удаляю все роли сервера из каждого логина в базе данных и оставляю только "sa"

Я полагаю, что "целью безопасности" является принятие мудрыхразработал функции безопасности вне SQL Server и заменил их необдуманным набором дыр в безопасности, которые вы разработали?

Это плохая, плохая идея, и хотя может быть способ сделать этоЗапутанная система, вы должны избегать этого.Существует причина, по которой SQL Server не дает возможности использовать только проверку подлинности SQL Server, а разрешает только проверку подлинности Windows.На самом деле, есть несколько причин:

1) Все в Windows работает в контексте безопасности Windows.Это включает в себя и сам SQL Server, который должен работать под идентификатором процесса службы, существующего в Windows, для доступа, среди прочего, ко всем его файлам данных.Невозможно полностью удалить проверку подлинности Windows с рисунка, поскольку она буквально управляет всем на каждом компьютере с Windows.

2) Использование проверки подлинности только для Windows (которая обычно является лучшим вариантом, чем использование проверки подлинности в смешанном режиме)позволяет для сценариев делегирования с использованием Kerberos.Другие схемы предполагают неразумное, а иногда и невозможное распределение полномочий.Хитрость в том, что для этого вам нужно правильно настроить Kerberos.

3) Ваши политики паролей могут централизованно администрироваться с использованием Active Directory с аутентификацией Windows.Это невозможно при аутентификации SQL Server, поскольку проверки политики паролей могут быть отключены без ведома сетевого администратора.

Кроме того, вы открываете учетную запись SA в качестве единственного средства входа на сервер.,Это крайне опрометчиво, если только вы не играете в песочнице, и даже тогда я бы этого не сделал.Используя только учетную запись SA, каждый, кто использует сервер, имеет доступ к карт-бланшу, чтобы делать практически все с вашим сервером.И если вы предоставили высокий уровень доступа к процессу службы SQL Server, практически любой пользователь может относительно легко получить контроль над всей машиной.

Это плохая идея.Я рекомендую отказаться от этой идеи и опубликовать в SO вопрос о ваших целях более высокого уровня и о том, как вы можете их достичь.

1 голос
/ 30 октября 2011

Вы можете использовать Аутентификацию Windows и / или Аутентификацию SQL Server во время установки SQL Server.Это был бы лучший способ действительно исключить тип аутентификации.Что касается мотивации, которую вы упомянули выше, я бы предостерег вас от этого.Я сравниваю это с тем, чтобы сказать: «Я улучшаю безопасность, делая всех администраторами».Это просто не имеет смысла.

Вам нужно повернуть множество ручек, чтобы повысить безопасность ... Роли являются ключевой частью любой стратегии ...

1 голос
/ 30 октября 2011

Попробуйте изменить строку подключения на: Provider = SQLNCLI10; Server = myServerAddress; Uid = myUsername; Pwd = myPassword

Обновление: Хотя это могло дать вам ответ, которым вы изначально былиища, я согласен со всем в сообщении Дейва Маркла и должен был упомянуть об этом ранее.

...