Login name im MS SQL Server 2005 für Navision DB setzen

7. Mai 2010 15:36

Hallo,

nach Importieren einer Navision-Datenbank haben die Benutzer dieser DB im MS SQL Server 2005 zwar einen "user name" aber keinen "login name".
Offensichtlich wird für die Authentifizierung in Navision aber mit dem login name im SQL Server abgeglichen, nicht mit dem user name.
Leider ist das Textfeld für den Login name ausgegraut/abgeblendet dargestellt, so dass ich den login name nicht im SQL Server setzen kann. Momentan muss ich das Konto in der DB (nicht im SQL Server) löschen und wieder einfügen und dabei den login name dem user name gleichlautend setzen.
Gibt es eine Stored Procedure oder andere effiziente Methode, den login name zu setzen?
Wie kann ich das von vornherein verhindern?

Das gilt wohl genauso für Navision 4.0SP3.

Danke und schönen Gruß

Re: Login name im MS SQL Server 2005 für Navision DB setzen

8. Mai 2010 14:57

Also beides ist notwendig - SQL Server hat ein zweistufiges Rechtesytem:

1. Die "Logins" werden auf Instanzebene definiert und regeln den Zugriff auf den SQL Server.
2. Die "User" werden auf DB Ebene definiert und steuern die Rechte der "Logins" innerhalb einer Datenbank

Soz. "on top" kommt nun das NAV Rechtesystem, das auf "Login" und "User" aufbaut, und den Zugriff über "Application Roles" (entweder $ndo$ar$... oder $ndo$shadow) steuert; dafür werden die beiden Prozeduren xp_ndo_enumusergroups oder xp_ndo_enumusersids sowie Tracefalg 4616 benötigt ... ächz ... is' aber so ...

Beim Import werden also nur die DB "User" angelegt; um die "Logins" muss man sich selber kümmern. Mit ein paar Zeilen SQL geht das u.U. etwas einfacher:

Code:
USE [Navision]  -- change db
SET STATISTICS IO OFF
SET NOCOUNT ON
GO

PRINT 'USE "master"'
PRINT 'GO'
PRINT ''
DECLARE @user VARCHAR(30), @type varchar(10), @tsql VARCHAR(1000)
DECLARE user_cur CURSOR FAST_FORWARD FOR
  SELECT "name", "type" FROM sys.database_principals
  WHERE "type" IN ('S', 'U')
    AND "name" NOT IN ('dbo', 'guest', 'INFORMATION_SCHEMA', 'sys')
  ORDER BY "name"
OPEN user_cur
FETCH NEXT FROM user_cur INTO @user, @type
WHILE @@FETCH_STATUS = 0 BEGIN
  SET @tsql =
'IF NOT EXISTS(SELECT TOP 1 NULL FROM sys.server_principals WHERE "type" IN (''S'', ''U'') AND "name" = ''' + @user + ''')
   EXEC sp_addlogin  @loginame =  ''' + @user + ''''
  IF @type = 'S'
    SET @tsql = @tsql + ', @passwd = ''welcome'''
  PRINT @tsql
  PRINT 'GO'
  FETCH NEXT FROM user_cur INTO @user, @type
END
CLOSE user_cur
DEALLOCATE user_cur
-- Copy output-script and execute as new query
-- PROVIDED "AS IS". NO WARRANTY, NO GUARANTEE, NO SUPPORT.


Aaaaber ... die Passwörter werden auf "Server-Ebene" definiert; bei "Windows Logins" eben via Windows/AD/etc.. D.h. die "Windows Logins" kann man einfach so anlegen, bei den DB-Usern muss das Passwort soz. manuell vorgegeben werden (im Script wäre das "welcome") ...

Re: Login name im MS SQL Server 2005 für Navision DB setzen

10. Mai 2010 17:18

Hallo Hr. Stryk,
danke für die Antwort.

Der Output des Scripts war so:

Code:
IF NOT EXISTS(SELECT TOP 1 NULL FROM sys.server_principals WHERE "type" IN ('S', 'U') AND "name" = 'KFranz')
   EXEC sp_addlogin  @loginame =  'KFranz', @passwd = ''
GO
...

Tatsächlich wurde dem User name der Login name aber nicht hinzugefügt.
sys.database_principals ist offensichtlich ein system view, der aber standardmäßig nichts zurückgibt. Man kann da nichts öffnen.

Mir ist auch nicht klar wofür 'S' und 'U' stehen in
Code:
WHERE "type" IN ('S', 'U')


Wo sind 'S' und 'U' Datentypen erläutert/spezifiziert?

Schönen Gruß
Andreas M.

Re: Login name im MS SQL Server 2005 für Navision DB setzen

10. Mai 2010 17:42

AndreasD hat geschrieben:Tatsächlich wurde dem User name der Login name aber nicht hinzugefügt.


Also ich fürchte mir ist nicht ganz klar was Du meinst, wenn Du von "User name" und "Login name" sprichst ... Wo genau soll das denn hinzugefügt werden?
Reden wir vom SQL Server oder einer NAV Tabelle?

Und: was die "types" in "sys.database_principals" kann man den "Books Online" entnhemen - das sind Datenbank und Windows Logins.