Domanda

Ho bisogno di verificare se un account di accesso specifico esiste già sul SQL Server, e se non lo fa, poi ho bisogno di aggiungerlo.

Ho trovato il seguente codice per aggiungere in realtà il login al database, ma voglio avvolgere questo in un IF (in qualche modo) per verificare se il login esiste prima.

CREATE LOGIN [myUsername] WITH PASSWORD=N'myPassword', 
DEFAULT_LANGUAGE=[us_english], 
CHECK_EXPIRATION=OFF, 
CHECK_POLICY=OFF 
GO

ho capito che ho bisogno di interrogare un database di sistema, ma non sai da dove cominciare!

È stato utile?

Soluzione

qui

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

Altri suggerimenti

Ecco un modo per fare questo in SQL Server 2005 e in seguito senza utilizzare i syslogins deprecate visualizzare:

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

La vista server_principals viene utilizzato al posto del sql_logins perché quest'ultimo non elenca gli account di accesso di Windows.

Se avete bisogno di verificare l'esistenza di un utente in un particolare database prima di creare loro, allora si può fare questo:

USE your_db_name

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

Come un minore aggiunta a questa discussione, in generale, si vuole evitare di utilizzare i punti di vista che iniziano con sys.sys * come Microsoft è solo per loro anche per la compatibilità all'indietro. Per il vostro codice, probabilmente si dovrebbe usare sys.server_principals. Ciò presuppone che si sta utilizzando SQL 2005 o superiore.

Prova questo (sostituire 'utente' con il nome di login reale):

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

BEGIN 
    --create login here
END

È possibile utilizzare la funzione built-in:

SUSER_ID ( [ 'myUsername' ] )

via

IF [value] IS NULL [statement]

come:

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

Questo funziona in SQL Server 2000.

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

su SQL 2005, cambiare la linea 2 a

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

Non sono sicuro su SQL 2008, ma sto cercando di indovinare che sarà lo stesso di SQL 2005 e se no, questo dovrebbe dare un'idea di dove t iniziare la ricerca.

che cosa stai esattamente desidera verificare la presenza di dati di accesso o utente? un account di accesso si crea a livello server e un utente viene creato a livello di database in modo un account di accesso è unico nel server

Inoltre viene creato un utente contro un account di accesso, un utente senza effettuare il login è un utente orfano e non è utile come u cant effettuare login sql server senza un login

forse u bisogno di questo

di controllo per l'accesso

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

È possibile che questo ritorno query 'X' se login esiste altro return null

quindi creare un account di accesso

CREATE LOGIN <username> with PASSWORD=<password>

questo crea un account di accesso in SQL Server .ma accetta password solo forti

creare un utente in ogni database che si desidera per l'accesso come

CREATE USER <username> for login <username>

Assegna eseguire i diritti di utente

 GRANT EXECUTE TO <username>

Occorre disporre di autorizzazioni di amministratore di sistema o dire 'sa' in breve

è possibile scrivere una procedura SQL per che su un 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

Questo è per Azure SQL:

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

Fonte: Come controllare se l'utente database esiste già nel database SQL Azure

Per prima cosa controlla login esistenza utilizzando syslogins visualizzare:

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

Poi si controlla la tua esistenza del database:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top