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

von Thomas, assono GmbH, Standort Kiel, 05.07.2014

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:

  • Aktueller Benutzer muss Administrator auf dem Server sein (Server-Dokument, Sicherheit-Reiter): gecheckt.
    Er hat sogar das Recht für Administration mit voller Berechtigung - und selbst wenn diese aktiviert ist, kommt der Fehler.
  • Er muss mindestens Autor sein auf der Datenbank admin4.nsf (Administrationsanforderungen) und Dokumente erstellen können: gecheckt, sogar Manager mit allen Rechten.
  • Er ist Manager auf der zu signierenden Datenbank
  • Er kann die Gestaltung der Datenbank mit seiner ID problemlos signieren.

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),

  • Auslöser: Durch Ereignis - Auswahl im Menü 'Aktionen'
  • Ziel: Keine
  • Sicherheitsstufe zur Laufzeit: 2. Beschränkte Operationen zulassen

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).

  • Auslöser: Durch Zeiplan - Nie
  • Ziel: Keine
  • Sicherheitsstufe zur Laufzeit: 2. Beschränkte Operationen zulassen

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:

  • cache.ndk löschen - bringt nichts
  • eine neue Arbeitsumgebung anlegen und zu dieser wechseln - bringt nichts
  • im persönlichen Adressbuch die Letzten Kontakte (Recent Contacts) löschen - bringt nichts
  • im persönlichen Adressbuch einen vorhandenen Eintrag für den aktuellen Benutzer löschen - bringt nichts
  • im persönlichen Adressbuch alle Gruppen löschen - bringt nichts

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.

Thomas Bahn

Thomas Bahn

Diplom-Mathematiker, IT-Spezialist & Speaker auf Fachkonferenzen

Thomas Bahn ist Mitgründer und Geschäftsführer der assono GmbH. Seit mehr als 20 Jahren berät er erfolgreich Unternehmen aus ganz Deutschland rund um das Thema Software und Digitalisierung. Insbesondere in den Bereichen HCL Notes und Domino (ehemals IBM) als auch bei aktuellen, unternehmensrelevanten KI-Themen wie Chatbots kennt er die neusten Entwicklungen und weiß, wie diese sich gewinnbringend für Unternehmen einsetzen lassen. Aufgrund seines Expertenwissens ist Thomas Bahn regelmäßiger Sprecher auf nationalen und internationalen Fachkonferenzen.

Fachbeitrag Administration HCL Domino HCL Notes

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

Sie haben Interesse an diesem Thema?

Gerne bieten wir Ihnen eine individuelle Beratung oder einen Workshop an.

Kontaktieren Sie uns

Weitere interessante Artikel