Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как получить всех пользователей (логин) с sql server идентификацией?  [new]
igr_ok
Member

Откуда:
Сообщений: 170
Сабж. Версия сервера 2012
2 сен 14, 16:43    [16524697]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
Glory
Member

Откуда:
Сообщений: 104751
sys.server_principals
2 сен 14, 16:46    [16524721]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
igr_ok
Member

Откуда:
Сообщений: 170
Glory
sys.server_principals
Спс.
Вношу уточнение. Нужны пользователи, имеющие доступ к конкретной БД.
3 сен 14, 11:06    [16527508]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
Glory
Member

Откуда:
Сообщений: 104751
igr_ok
Нужны пользователи, имеющие доступ к конкретной БД.

А подумать ?
Если серверные логины называются server_principals, то как называются пользователи database ?
3 сен 14, 11:09    [16527529]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Glory
А подумать ?

ну что Вы с самом деле то ....
3 сен 14, 11:21    [16527640]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
igr_ok
Нужны пользователи, имеющие доступ к конкретной БД.
См. has_dbaccess
3 сен 14, 11:32    [16527736]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
afqwefqwe
Guest
можно так для текущей базы

select
	sp.name as login_name,
	sp.type_desc,
	dp.name as user_name,
	sp.type_desc
from
	sys.server_principals sp
		join
	sys.database_principals dp on sp.sid = dp.sid
3 сен 14, 11:35    [16527765]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
o-o
Guest
afqwefqwe,

+ еще отфильтровать по
where sp.type = 'S' 

раз хотят именно "с sql server идентификацией"
3 сен 14, 11:46    [16527907]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
o-o
Guest
то, кстати, повезло, что только "с sql server идентификацией".
а то бывают еще виндовые группы и отдельные виндовые юзеры с индивидуальными логинами.
и тогда приведенный код "пролетает", когда товарищ отмаплен в базу через группу.
т.е. его индивидуальный логин не вылезет в результате запроса,
тем не менее, в базу он попадет (через группу), а не все всегда знают, кто в какую группу входит
3 сен 14, 11:53    [16527983]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
qrqwrqwerqw
Guest
o-o
то, кстати, повезло, что только "с sql server идентификацией".
а то бывают еще виндовые группы и отдельные виндовые юзеры с индивидуальными логинами.
и тогда приведенный код "пролетает", когда товарищ отмаплен в базу через группу.
т.е. его индивидуальный логин не вылезет в результате запроса,
тем не менее, в базу он попадет (через группу), а не все всегда знают, кто в какую группу входит


ну у прынцыпи да, но автор увиди WINDOWS_GROUP в type_desc и пойдет спрашивать у AD админа таки хто туда вхидить?
3 сен 14, 12:00    [16528053]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
igr_ok
Member

Откуда:
Сообщений: 170
o-o
то, кстати, повезло, что только "с sql server идентификацией".
а то бывают еще виндовые группы и отдельные виндовые юзеры с индивидуальными логинами.
и тогда приведенный код "пролетает", когда товарищ отмаплен в базу через группу.
т.е. его индивидуальный логин не вылезет в результате запроса,
тем не менее, в базу он попадет (через группу), а не все всегда знают, кто в какую группу входит
Как бы логично для sql server авторизации показывать только логины "с sql server идентификацией". А вот когда нужно будет доступы раздавать, потребуются все.
З.Ы. Спс и тем, кто заставлял думать, и тем, кто выложил рабочий код :)
3 сен 14, 12:39    [16528471]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
Wlr-l
Member

Откуда:
Сообщений: 599
igr_ok, посмотрите следующий скрипт:

with A as (
select '['+left(name+']'+replicate(' ',40),30) as userName
      ,type
  from sys.database_principals
 where principal_id>4 and authentication_type>0
)

select case type
        when 'S' then 'create login '+userName+' with password=''1'', check_expiration=off, check_policy=off;'
        when 'U' then 'create login '+userName+' from windows with default_database=[master],default_language=[us_english];'
        else null
       end as login
      ,'create user '+userName+' for login '+userName+' with default_schema=[dbo];' as DBuser
  from A
 order by type,userName;
3 сен 14, 14:43    [16529523]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
o-o
Guest
Wlr-l,

я не igr_ok, но посмотреть могу :)
в sys.database_principals нету authentication_type, есть type, но и он не числовой, так что вот это
authentication_type>0 -- непонятно что.

и потом генерятся скрипты создания юзеров и логинов на основании sys.database_principals -- это жесть.
не все юзеры обязаны логины иметь, да и ТС просил всего лишь список существующих логинов, а ваш скрипт даже не заглядывает в server_principals,
думаете, не глядя туда можно угадать имя логина, он обязaн с именем юзера совпасть что-ли?
а с такими как быть:
create login my_super_login with password = '*****';
 go
 use my_db;
 go
 create user my_super_user from login my_super_login;
 create user my_super_user1 without login;


+ еще и всем пароль одинаковый генерит, это такой прикол что-ли?
3 сен 14, 15:49    [16530070]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
Wlr-l
Member

Откуда:
Сообщений: 599
o-o,

Попробуйте выполнить этот скрипт и в Вас все получится.

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

Пароль у всех "1" - программы все равно потребует изменения пароля при первом ее запуске.

Случай создания пользователя без логина тоже можно обработать. См. описание sys.database_principals. Более того можно написать такой же скрипт для восстановления ролей и приписывания к ним пользователей.

Потом есть еще напильник, если что-то не подходит один к одному.
3 сен 14, 16:00    [16530174]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wlr-l
Попробуйте выполнить этот скрипт и в Вас все получится.

Msg 207, Level 16, State 1, Line 5
Invalid column name 'authentication_type'.
3 сен 14, 16:02    [16530190]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
Wlr-l
Member

Откуда:
Сообщений: 599
o-o, кстати если перед "case" написать "userName," то получим список всех пользователей базы данных.
3 сен 14, 16:04    [16530208]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
Wlr-l
Member

Откуда:
Сообщений: 599
Glory, версия сервера 2012, в более ранних использовать напильник.
3 сен 14, 16:06    [16530215]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
Wlr-l
Member

Откуда:
Сообщений: 599
with A as (
select '['+left(name+']'+replicate(' ',40),30) as userName
      ,type
      ,authentication_type
  from sys.database_principals
 where principal_id>4 and authentication_type>0
)

select case type
        when 'S' then 'create login '+userName+' with password=''1'', check_expiration=off, check_policy=off;'
        when 'U' then 'create login '+userName+' from windows with default_database=[master],default_language=[us_english];'
        else null
       end as login
      ,'create user '+userName+' for login '+userName+' with default_schema=[dbo];' as DBuser
      ,authentication_type
  from A
 order by type,userName;


если SQL, то authentication_type=1,
если Windows, то authentication_type=3.
3 сен 14, 16:11    [16530253]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wlr-l
Glory, версия сервера 2012, в более ранних использовать напильник.

Т.е. вы сами не знаете, зачем вы пометили в запрос authentication_type>0

Wlr-l
если SQL, то authentication_type=1,
если Windows, то authentication_type=3.

А что будет при authentication_type=2 ?
3 сен 14, 16:22    [16530369]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
Wlr-l
Member

Откуда:
Сообщений: 599
Glory, не только 2, но и 0, и 1..., потому что там есть и другие пользователи, например, dbo, которые не нужны в данном случае.
3 сен 14, 16:26    [16530410]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wlr-l
Glory, не только 2, но и 0, и 1..., потому что там есть и другие пользователи, например, dbo, которые не нужны в данном случае.

Поэтому и не понятно, почему вы используете это поле для каких то вывод о типе авторизации
3 сен 14, 16:28    [16530434]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
Wlr-l
Member

Откуда:
Сообщений: 599
Glory, еще раз 1) отсеять ненужных пользователей, 2)отсеять роли, которые в данном случае не нужны.
Попробуйте выполнить этот скрипт с таким условием:

where principal_id>4 --and authentication_type>0
3 сен 14, 16:33    [16530467]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wlr-l
еще раз 1) отсеять ненужных пользователей, 2)отсеять роли, которые в данном случае не нужны.

Вопрос был не для чего это поле в запросе. Вопрос был - почему на основании именно этого поля
3 сен 14, 16:34    [16530481]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
Wlr-l
Member

Откуда:
Сообщений: 599
Glory, возможно, я что-то не знаю, объясните пожалуйста. BOL запущен.
3 сен 14, 16:35    [16530487]     Ответить | Цитировать Сообщить модератору
 Re: Как получить всех пользователей (логин) с sql server идентификацией?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wlr-l
Glory, возможно, я что-то не знаю, объясните пожалуйста. BOL запущен.

Это вы мне объясните. Вы же это поле используете.
3 сен 14, 16:36    [16530490]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить