Per SQL Win-Auth Benutzer in NAV 2013/NAV 2015 hinzufügen

Als Entwickler oder Berater im Dynamics NAV kennt man das Problem: Man hat eine NAV-Datenbank mit Win-Authentication, auf die man erstmal keinen Zugriff hat. Sei es, dass man den Login vergessen hat, oder der, der den Zugang kennt, ist nicht erreichbar, oder man setzt eine Datenbank mit Windows-Authentication auf, deren User man nicht auf dem System hat. Hier ein Weg, um doch NAV-Zugriff auf die Datenbank zu erhalten.

Diesen Trick inkl. Skripte habe ich von dem bekannten NAV-Blogger Saurav Dhyani. Credits to him!

Voraussetzung:

  • Zugriff auf die SSID des gewünschten Users
  • Zugriff auf die SQL-Datenbank per SQL Management Studio

Die Idee ist dabei, den gewünschten Windows-Benutzer per SQL-Skript in die NAV-DB zu schleusen. Dazu wird die SSID (interne, eindeutige ID eines Users innerhalb eines Windows-Systems) des Users benötigt. Die holen wir uns hier per Powershell:

$objUser = New-Object System.Security.Principal.NTAccount("YourDomain\Your ID")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value

Hierbei muss YourDomain\Your ID durch euren Benutzer ersetzt werden. Dann erhält man die SSID:

Windows PowerShell

Anschließend das SQL Management Studio aufrufen, ein neues Skript erstellen mit folgenden Inhalt:

USE [NAV2015]

DECLARE @USERSID uniqueidentifier, @WINDOWSSID nvarchar(119), @USERNAME nvarchar(50), @USERSIDTXT varchar(50)

SELECT NEWID()
SET @USERNAME = 'YourDomain\Your ID'
SET @USERSID = NEWID()
SET @USERSIDTXT = CONVERT(VARCHAR(50), @USERSID)
SET @WINDOWSSID = 'YOUR_SSID'

INSERT INTO [dbo].[User]
([User Security ID],[User Name],[Full Name],[State],[Expiry Date],[Windows Security ID],[Change Password],[License Type]
,[Authentication Email])
VALUES
(@USERSID,@USERNAME,'',0,'1753-01-01 00:00:00.000',@WINDOWSSID,0,0,'')

INSERT INTO [dbo].[User Property]
([User Security ID],[Password],[Name Identifier],[Authentication Key],[WebServices Key],[WebServices Key Expiry Date],
[Authentication Object ID])
VALUES
(@USERSID,'','','','','1753-01-01 00:00:00.000','')

INSERT INTO [dbo].[Access Control]
([User Security ID],[Role ID],[Company Name])
VALUES
(@USERSID,'SUPER','')
GO

Dabei muss bei USE der entsprechende Datenbank-Name, SET @USERNAME der gewünschte Benutzer und unter SET WINDOWSSID die SSID aus dem Powershell-Skript eingetragen werden. Der Benutzer erhält gleichzeitig die SUPER-Rolle.

Bereich

Nach Ausführen des Skripts erhaltet ihr eine GUID als Antwort zurück. Dieser User kann dann auf NAV als SUPER-User zugreifen.