Проверка, существует ли вход в систему SQL Server уже

Этот запрос отличается от того, что вы спрашивали:

Это два способа получить пользователя:

  1. Объединение строк:

"MATCH (u: USER) WHERE u.id =" + id + "RETURN u"

  1. Параметризовано:

"MATCH ( u: USER) WHERE u.id = {id} RETURN u "

Вы можете проверить, передав значение id в обоих запросах, например:

1 ИЛИ 1 = 1

Или худшее значение для id , например:

1 ИЛИ 1 = 1
[ 110] С вами
УДАЛИТЬ УДАЛИТЬ u

165
задан LarsH 8 May 2013 в 15:08
поделиться

6 ответов

Из здесь

If not Exists (select loginname from master.dbo.syslogins 
    where name = @loginName and dbname = 'PUBS')
Begin
    Select @SqlStatement = 'CREATE LOGIN ' + QUOTENAME(@loginName) + ' 
    FROM WINDOWS WITH DEFAULT_DATABASE=[PUBS], DEFAULT_LANGUAGE=[us_english]')

    EXEC sp_executesql @SqlStatement
End
134
ответ дан 23 November 2019 в 21:06
поделиться

Чтобы к hande конфликту имен между логинами, ролями, пользователи и т.д. необходимо проверить type столбец согласно документация Microsoft sys.database_principals

для обработки специального chacters в именах пользователей и т.д., используйте N'<name>' и [<name>] соответственно.

Создают вход в систему

USE MASTER
IF NOT EXISTS (SELECT 1 FROM master.sys.server_principals WHERE 
[name] = N'<loginname>' and [type] IN ('C','E', 'G', 'K', 'S', 'U'))
    CREATE LOGIN [<loginname>] <further parameters>

, пользователь базы данных Create

USE <databasename>
IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE 
[name] = N'<username>' and [type] IN ('C','E', 'G', 'K', 'S', 'U'))
    CREATE USER [<username>] FOR LOGIN [<loginname>]

Создает роль базы данных

USE <databasename>
IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE 
[name] = N'<rolename>' and Type = 'R')
    CREATE ROLE [<rolename>]

, Добавляет пользователь к роли

USE <databasename>
EXEC sp_addrolemember N'<rolename>', N'<username>'

права Grant на роль

USE <databasename>
GRANT SELECT ON [<tablename>] TO [<rolename>]
GRANT UPDATE ON [<tablename>] ([<columnname>]) TO [<rolename>]
GRANT EXECUTE ON [<procedurename>] TO [<rolename>]
0
ответ дан 23 November 2019 в 21:06
поделиться

В качестве незначительного дополнения к этому потоку, как правило, вам следует избегать использования представлений, которые начинаются с sys.sys *, поскольку Microsoft включает их только для обратной совместимости. Для вашего кода вам, вероятно, следует использовать sys.server_principals. Предполагается, что вы используете SQL 2005 или выше.

30
ответ дан 23 November 2019 в 21:06
поделиться

Попробуйте следующее (замените 'user' фактическим именем входа):

IF NOT EXISTS(
SELECT name 
FROM [master].[sys].[syslogins]
WHERE NAME = 'user')

BEGIN 
    --create login here
END
8
ответ дан 23 November 2019 в 21:06
поделиться

Это работает на SQL Server 2000.

use master
select count(*) From sysxlogins WHERE NAME = 'myUsername'

на SQL 2005 измените вторую строку на

select count(*) From syslogins WHERE NAME = 'myUsername'

Я не уверен насчет SQL 2008, но предполагаю, что это будет то же самое, что и SQL 2005, а если нет, это должно дать вам представление о том, с чего начать поиск.

6
ответ дан 23 November 2019 в 21:06
поделиться

Способ сделать это в SQL Server 2005 и более поздних версиях без использования устаревшего вида syslogins:

IF NOT EXISTS 
    (SELECT name  
     FROM master.sys.server_principals
     WHERE name = 'LoginName')
BEGIN
    CREATE LOGIN [LoginName] WITH PASSWORD = N'password'
END

Вид server_principals используется вместо sql_logins, так как в последнем нет списка логинов Windows.

Если перед их созданием необходимо проверить наличие пользователя в определенной базе данных, то это можно сделать:

USE your_db_name

IF NOT EXISTS
    (SELECT name
     FROM sys.database_principals
     WHERE name = 'Bob')
BEGIN
    CREATE USER [Bob] FOR LOGIN [Bob] 
END
278
ответ дан 23 November 2019 в 21:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: