Microsoft.SqlServer.Management.Smo.ServerConnection class.Net

Доброго дня.

Пишу тут з надією, що вже хтось стикався з даною проблемою і зможе допомогти...

Так от, в нас на sql server 2005 стоїть обовязкова зміна паролю щомісяця, стоїть задача перехопити це і змінити пароль програмно.

Ось такий от код, який можна знайти в інтернеті, не працює, видає ChangePasswordFailureException

string ConnectionString = „Data Source=MyServer; Initial Catalog=MyDatabase; Persist Security Info=True; User ID=MyLogin; Password=MyOldPassword”

SqlConnection connection = new SqlConnection (Connectionstring);

ServerConnection serverConnection = new ServerConnection (connection);

serverConnection.ChangePassword (MyNewPassword); // зрозуміло, що ексепшн вилітає саме тут...

є якісь ідеї?

буду вдячний за допомогу!

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Все, проблема вирішена))
Проблема була в тому, що тестовим користувачам, яких мені створив адмін не було доступу до потрібної мені бази на сервері, тому різні ChangePassword () і валилися...
Мда...
Вибачте, що морочив всім голову!

Дякую за намаганні допомогти всім дописувачам!:)


А можно уточнить, черной магией какого рода Вы пользуетесь для выполнения этой строки? В указанной выше ссылке на MSDN этот метод числится как статический и с двумя аргументами (connectionString и newPassword). Или это я что-то пропустил?
я спершу писав про клас Microsoft.SqlServer.Management.Smo.ServerConnection і його нестатичний метод, який, як мені здавалося, мав міняти пароль. А в мсдн-івському прикладі пишеться про клас System.Data.SqlClient.SqlConnection і його статичний метод ChangePassword ()

Тому ніякої чорної магії нема:) просто непорозуміння:)


А чьо, Windows Authentication уже отменили?
В строке ConnectionString фраза Integrated Security=SSPI всегда раньше означала как раз то, что используется Win Auth, а не аутентификация секвела.
Заходишь виндовым юзером с админскими правами на скл, и правишь кого хочешь. Никаких паролей вводить не надо.
Правда то было еще в скл2000, но в 2005 врядли это поменялось.

тільки от, блін, sql сервер стоїть не на тій машині, що і хостінг, тому без логіна і пароль (тільки вже до віндовза) в коді всерівно не обійтись...

serverConnection.ChangePassword (MyNewPassword); // зрозуміло, що ексепшн вилітає саме тут...

А можно уточнить, черной магией какого рода Вы пользуетесь для выполнения этой строки? В указанной выше ссылке на MSDN этот метод числится как статический и с двумя аргументами (connectionString и newPassword). Или это я что-то пропустил?

И ещё было бы интересно узнать, нету ли каких-либо занимательных подробностей во внутренних полях падающего исключения (может InnerException какой или Message вразумительный ну или Data не пустая)? Может там какая подсказка, что именно падает?

А чьо, Windows Authentication уже отменили?
В строке ConnectionString фраза Integrated Security=SSPI всегда раньше означала как раз то, что используется Win Auth, а не аутентификация секвела.
Заходишь виндовым юзером с админскими правами на скл, и правишь кого хочешь. Никаких паролей вводить не надо.

Правда то было еще в скл2000, но в 2005 врядли это поменялось.

>> А может стоит дернуть тот самый метод ChangePassword который описан в начале страницы?
що означає дьорнуть?

ну я і дьоргаю, викликаю, не виходить ((

А может стоит дернуть тот самый метод ChangePassword который описан в начале страницы?

>> можно, описано здесь
>> Даже с подробным примером как нельзя более подходящим к описанной ситуации.
бугага.
MSDN-івський код не працює.
На другому connection.Open (), коли ми поміняли пароль, він природньо каже login failed!

ну ясно, він же тупо хоче приконектитися під новим, ще не зміненим паролем!

Не скажу відповідь, не спец по SqlServer, я по ORACLE.
Але по аналогії може на щось наштовхне, в яку сторону копать.
В ораклі це помилка «ORA-28001 the password has expired». Тобто ловити код помилки такий. Далі.
Щоб програмно в такому випадку змінити пароль (не через «альтер юзер...»), наприклад в OCI, то OCIPasswordChange, там передаєш юзера-старий-новий пароль.

Логічно шукати щось подібне.

>> Законекться под sa или под кем-то другим у которого пароль не заэкспайрился еще
))

ну в принципі можна й так...Але тоді прийдеться тримати в коді логін і пароль якогось користувача, щоб під ним конектитись до БД, який матиме доступ до зміни паролю для будь-кого, а це, мабуть, не дуже безпечно:)

можно, описано здесь

Даже с подробным примером как нельзя более подходящим к описанной ситуации.

>> Ему ж ведь тоже нужен открытый коннекшин к базе. А то как он пароль поменяет в базе к которой и не приконнекчен?

Але ж Microsoft SQL Server Management Studio якось то перехоплює це і пропонує поміняти пароль... Невже я не можу цього зробити?!

ну так оно и не приконектится пока пароль не поменяют для того юзера: -)

Законекться под sa или под кем-то другим у которого пароль не заэкспайрился еще

Dev.net

ось що каже connection.Open () — Видає exeption: Login failed for user ’MyUser’. Reason: The password of the account must be changed.

И да, еще, для того чтоб юзер мог поменять пароль у юзера под которым коннектимся права на эту самую смену пароля должны быть.

Дык...,
а как тогда должен сработать serverConnection.ChangePassword?
Ему ж ведь тоже нужен открытый коннекшин к базе. А то как он пароль поменяет в базе к которой и не приконнекчен?
Кстати, не заметил сразу, в приведенном куске кода открытие коннекшина тоже отсутствует.

А что говорит connection.Open ()?

Dev.net
Справа в тому, що цей T-SQL можна виконати вже ПІСЛЯ того, як законектився, а я то цього зробити не можу...

connection.Open () не спрацьовує! не пускає!

Может стоит попробывать заюзать ALTER LOGIN?
Тоже вроде как пароли меняет.

Почитать про него можно здесь

Підписатись на коментарі