Quick-Tipp: Fehler beim Signieren von Datenbanken mit der Server-ID

von Thomas Bahn,
assono GmbH, Standort Kiel,

Das war mal wieder ein ganz mysteriöser Fehler: Im Domino Administrator unter dem Reiter Dateien eine Datenbank ausgewählt, im Rechtsklick-Kontextmenü "Signieren..." und im folgenden Dialog "ID des aktiven Servers" gewählt. Sofort kommt eine Dialogbox mit der Fehlermeldung "Sie sind zur Durchführung dieser Operation nicht berechtigt." (You are not authorized to perform that operation).

Kurze Recherche und viel Überprüfen der aktuellen Einstellungen:

Als Entwickler im Herzen probiere ich es über einen Agenten, den ich in der
zu signierenden Datenbank erstelle:

Option Public
Option Declare

Sub Initialize

		'/**
		'* signs this database by manually creating a request with NotesAdministrationProcess.
		'*
		'* @author		 Thomas Bahn <tbahn@assono.de>
		'* @version		2014-07-03
		'*/			

		Dim uiws As New NotesUIWorkspace
		Dim session As NotesSession
		Dim currentDB As NotesDatabase
		Dim adminDB As NotesDatabase
		Dim adminP As NotesAdministrationProcess
		Dim noteID As String

		Set uiws = New NotesUIWorkspace
		Set session = New NotesSession
		Set currentDB = session.CurrentDatabase
		Set adminDB = New NotesDatabase(currentDB.Server, "admin4.nsf")
		Set adminP = session.CreateAdministrationProcess(currentDB.Server)

		noteID = adminP.SignDatabaseWithServerID(currentDB.Server, currentDB.FilePath,False)

		If noteID <> "" Then
				Call uiws.EditDocument(False,adminDB.GetDocumentByID(noteID))
		End If

End Sub

Ich nenne ihn "Datenbank per Administration
Request signieren lassen via AdminP-Objekt" (SignDatabaseAdminPViaAdminPObject),

Es kommt in der Zeile mit "adminP.SignDatabaseWithServerID" der gleiche Fehler wie im Admin-Client. Noch gebe ich mich nicht geschlagen, ein anderer Weg, ein anderer Agent:

Option Public
Option Declare

Sub Initialize
		'/**
		' * signs this database by manually creating a request document in the admin4.nsf.
		' *
		' * @author								Thomas Bahn <tbahn@assono.de>
		' * @version				2014-07-03
		' */
			 
		Dim session As NotesSession
		Dim currentDB As NotesDatabase
		Dim adminDB As NotesDatabase
		Dim requestDoc As NotesDocument

			 
		Set session = New NotesSession
		Set currentDB = session.CurrentDatabase
		Set adminDB = New NotesDatabase(currentDB.Server, "admin4.nsf")
			 
		Set requestDoc = adminDB.CreateDocument
			
		Call CreateItem(requestDoc, "Form", 0, "AdminRequest", False, True)
		Call CreateItem(requestDoc, "Type", 0, "AdminRequest", False, True)
			 
		Call CreateItem(requestDoc, "ProxyProcess", 0, "Adminp", True, True)
		Call CreateItem(requestDoc, "ProxyAction", 0, "101", True, True)
		Call CreateItem(requestDoc, "ProxyTextItem1", 0, "0", True, True)
		Call CreateItem(requestDoc, "ProxyOriginatingTimeDate", 0, Now, True, False)
			 
		Call CreateItem(requestDoc, "ProxyServer", 0, currentDB.Server, True, True)
		Call CreateItem(requestDoc, "ProxyDatabasePath", 0, currentDB.FilePath, True, True)
		Call CreateItem(requestDoc, "ProxyNameList", 0, currentDB.Title, True, True)
							 
		Call CreateItem(requestDoc, "ProxyAuthor", 0, session.UserName, True, True)
		Call CreateItem(requestDoc, "FullName", AUTHORS, session.UserName, True, False)
		Call CreateItem(requestDoc, "$OnBehalfOf", AUTHORS, session.UserName, True, False)
		Call CreateItem(requestDoc, "ProxyOriginatingAuthor", AUTHORS, session.UserName, True, False)
		Call CreateItem(requestDoc, "ProxyOriginatingOrganization", AUTHORS, StrRightBack(session.UserName, "/O="), True, False)

		Call CreateItem(requestDoc, "ProxyOriginatingRequestUNID", 0, requestDoc.UniversalID, False, False)
		Call requestDoc.Sign()
		Call requestDoc.Save(True, True)

End Sub

Sub CreateItem(doc As NotesDocument, itemName As String, itemType As Integer, itemValue As Variant, signItem As Boolean, protectItem As Boolean)
		'/**
		' * creates a item in the document.
		' *
		' * @param								doc NotesDocument to create item in.
		' * @param								itemName name of the item to create.
		' * @param								itemType type of the item to create.
		' * @param								itemValue value to assign to item.
		' * @param								signItem should item be signed?
		' * @param								protectItem should item be protected?
		' *
		' * @author								Thomas Bahn <tbahn@assono.de>
		' * @version				2014-07-03
		' */
			 
		Dim item As NotesItem
			 
		If doc.HasItem(itemName) Then
				Call doc.RemoveItem(itemName)
		End If
			 
		If itemType <> 0 Then
				Set item = New NotesItem(doc, itemName, itemValue, itemType)
		Else
				Set item = New NotesItem(doc, itemName, itemValue)
		End If

		item.IsSummary = True
		item.IsSigned = signItem
		item.IsProtected = protectItem
End Sub

Ich speichere diesen Agenten in der
gleichen Datenbank unter den Namen "Datenbank per Administration Request
signieren lassen via admin4.nsf-Dokument" (SignDatabaseAdminPViaAdmin4.nsfDoc).

Dann starte ich ihn auf der Serverkonsole mit tell amgr run "datenbank.nsf" 'SignDatabaseAdminPViaAdmin4.nsfDoc' Er läuft fehlerfrei durch und die Datenbank wird tatsächlich mit der Server-ID signiert (Juhu!). Eigentlich machen beide Agenten doch das gleiche: Ein Dokument in der admin4.nsf anlegen, das dann vom Administrationsprozess abgearbeitet wird. Trotzdem geht der eine Weg, der andere nicht. Weitere, ausgiebige Recherchen bringen weitere Ideen:

Jetzt komme ich irgendwie auf die Idee,
einige Gruppen aus dem öffentlichen Adressbuch in das persönliche kopieren:
LocalDomainAdmins und LocalDomainServers.

ERFOLG!

Das war's.

Offenbar prüft der (Admin-)Client die
Berechtigung des Benutzers und verwendet dabei ggf. vorhandene lokale Gruppen?!

Egal, Problem gelöst, Kunde glücklich.
Und das ist das Wichtigste.

Fachbeitrag IBM Notes IBM Domino Tipp Administration

Sie haben Fragen zu diesem Artikel? Kontaktieren Sie uns gerne: blog@assono.de

Sie wollen eine individuelle Lösung? Kontaktieren Sie uns

Weitere interessante Artikel

Sie haben Fragen? Wir sind für Sie da.

Wenn Sie mehr über unsere Angebote erfahren möchten, können Sie uns jederzeit kontaktieren. Sie können uns auf verschiedene Weisen für eine unverbindliche Erstberatung erreichen:

assono GmbH

Standort Kiel (Zentrale)
assono GmbH
Lise-Meitner-Straße 1–7
24223 Schwentinental

Standort Hamburg
assono GmbH
Bornkampsweg 58
22761 Hamburg

Telefonnummern:
Zentrale: +49 4307 900 407
Techn. Hotline: +49 4307 900 403
Vertrieb: +49 4307 900 402

E-Mail-Adressen:
kontakt@assono.de
bewerbung@assono.de