質問

私は、特定のログインがすでにSQL Server上で存在するかどうかを確認する必要があり、そうでない場合は、その後、私はそれを追加する必要があります。

私は実際にデータベースにログインを追加し、私はログインが最初に存在しているかどうかを確認し(何とか)IF文でこれをラップします。

に以下のコードを発見しました
CREATE LOGIN [myUsername] WITH PASSWORD=N'myPassword', 
DEFAULT_LANGUAGE=[us_english], 
CHECK_EXPIRATION=OFF, 
CHECK_POLICY=OFF 
GO

私はどこから始めればわからないシステムデータベースを調べる必要があるが、それを理解する!

役に立ちましたか?

解決

ここ

から

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

他のヒント

ここでは、非推奨のsysloginsを使用せずに、SQL Server 2005および以降でこれを行う方法があります表示します。

IF NOT EXISTS 
    (SELECT name  
     FROM master.sys.server_principals
     WHERE name = 'LoginName')
BEGIN
    CREATE LOGIN [LoginName] WITH PASSWORD = N'password'
END
後者は、Windowsのログインをリストしていないため、

server_principals表示ではなくsql_loginsのに使用されます。

あなたがそれらを作成する前に、特定のデータベース内のユーザの存在を確認する必要がある場合は、あなたがこれを行うことができます:

USE your_db_name

IF NOT EXISTS
    (SELECT name
     FROM sys.database_principals
     WHERE name = 'Bob')
BEGIN
    CREATE USER [Bob] FOR LOGIN [Bob] 
END

は、このスレッドにマイナーな追加として、一般的には、Microsoftが唯一の後方互換性のためにそれらを含めているとして* sys.sysで始まるビューを使用しないようにしたいです。あなたのコードのために、あなたはおそらくsys.server_principalsを使用する必要があります。これは、SQL 2005以降を使用していると仮定されます。

これは(実際のログイン名に 'ユーザー' を置き換え)してみます:

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

BEGIN 
    --create login here
END

あなたは、組み込みの機能を使用することができます:

SUSER_ID ( [ 'myUsername' ] )

タグ経由
IF [value] IS NULL [statement]

のように:

IF SUSER_ID (N'myUsername') IS NULL
CREATE LOGIN [myUsername] WITH PASSWORD=N'myPassword', 
DEFAULT_LANGUAGE=[us_english], 
CHECK_EXPIRATION=OFF, 
CHECK_POLICY=OFF 
GO

https://technet.microsoft.com /en-us/library/ms176042(v=sql.110).aspxする

SQL Server 2000の上のこの作品ます。

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

SQL 2005の上に、

に第2ラインを変更
select count(*) From syslogins WHERE NAME = 'myUsername'
私は、SQL 2008についてはわからないんだけど、私はそれがSQL 2005と同じになることを推測しているとされていない場合は、これはあなたにtは探し始める場所のアイデアを与える必要があります。

あなたは正確にログインまたはユーザーのチェックを何をしたいしていますか? ログインはサーバーレベルで作成され、ログインがサーバー内で一意であるように、ユーザーは、データベース・レベルで作成されます。

は、ユーザーがログインに対して作成され、ログインせずにユーザーが孤立したユーザーであり、uは、ログイン

せずにSQL Serverのログインを行っカントとして有用ではありません

多分uはこれを必要とする

ログイン

のチェック
select 'X' from master.dbo.syslogins where loginname=<username>

上記のクエリの戻り「X」のログインが他のリターンが存在する場合はnull

その後、ログインを作成

CREATE LOGIN <username> with PASSWORD=<password>
それが受け入れ.but

これは、SQL Serverのログインを作成するだけで強力なパスワード

としてログインのためにしたい各データベースにユーザーを作成します
CREATE USER <username> for login <username>

割り当て、ユーザーに実行権限を

 GRANT EXECUTE TO <username>

YOUはSYSADMIN権限を持っている必要がありますまたは略して 'SA' と言う。

は、データベース

にそのためのSQLプロシージャを記述することができます
create proc createuser
(
@username varchar(50),
@password varchar(50)
)
as
begin
if not exists(select 'X' from master.dbo.syslogins where loginname=@username)
begin
 if not exists(select 'X' from sysusers where name=@username)
 begin
exec('CREATE LOGIN '+@username+' WITH PASSWORD='''+@password+'''')
exec('CREATE USER '+@username+' FOR LOGIN '+@username)
exec('GRANT EXECUTE TO '+@username)
end
end
end

このは、AzureのSQLのためです。

IF (EXISTS(SELECT TOP 1 1 FROM sys.sql_logins WHERE [name] = '<login>'))
    DROP LOGIN [<login>];

ソース:どうかを確認する方法データベース・ユーザーがすでにAzureのSQLデータベース

に存在するかどうか

まず、あなたが見るのsysloginsを使用してログイン有無を確認する必要があります:

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

そして、あなたは、データベースの存在を確認する必要があります:

USE your_dbname

IF NOT EXISTS
    (SELECT name
     FROM sys.database_principals
     WHERE name = 'your_dbname')
BEGIN
    CREATE USER [your_dbname] FOR LOGIN [YourLoginName] 
END
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top