Checking if a SQL Server login already exists

前端 未结 10 2100
盖世英雄少女心
盖世英雄少女心 2020-12-12 12:27

I need to check if a specific login already exists on the SQL Server, and if it doesn\'t, then I need to add it.

I have found the following code to actually add the

相关标签:
10条回答
  • 2020-12-12 12:41

    Here's a way to do this in SQL Server 2005 and later without using the deprecated syslogins view:

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

    The server_principals view is used instead of sql_logins because the latter doesn't list Windows logins.

    If you need to check for the existence of a user in a particular database before creating them, then you can do this:

    USE your_db_name
    
    IF NOT EXISTS
        (SELECT name
         FROM sys.database_principals
         WHERE name = 'Bob')
    BEGIN
        CREATE USER [Bob] FOR LOGIN [Bob] 
    END
    
    0 讨论(0)
  • 2020-12-12 12:42

    This is for Azure SQL:

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

    Source: How to check whether database user already exists in Azure SQL Database

    0 讨论(0)
  • 2020-12-12 12:43

    This works on SQL Server 2000.

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

    on SQL 2005, change the 2nd line to

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

    I'm not sure about SQL 2008, but I'm guessing that it will be the same as SQL 2005 and if not, this should give you an idea of where t start looking.

    0 讨论(0)
  • 2020-12-12 12:46

    what are you exactly want check for login or user ? a login is created on server level and a user is created at database level so a login is unique in server

    also a user is created against a login, a user without login is an orphaned user and is not useful as u cant carry out sql server login without a login

    maybe u need this

    check for login

    select 'X' from master.dbo.syslogins where loginname=<username>
    

    the above query return 'X' if login exists else return null

    then create a login

    CREATE LOGIN <username> with PASSWORD=<password>
    

    this creates a login in sql server .but it accepts only strong passwords

    create a user in each database you want to for login as

    CREATE USER <username> for login <username>
    

    assign execute rights to user

     GRANT EXECUTE TO <username>
    

    YOU MUST HAVE SYSADMIN permissions or say 'sa' for short

    you can write a sql procedure for that on a database

    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
    
    0 讨论(0)
提交回复
热议问题