Benutzer-Werkzeuge

Webseiten-Werkzeuge


nosql:security_oracle_nosql_db_v3

Sicherheitsfeature in der Oracle NoSQL V3 - Protokoll Verschlüsselung und User Login

Ab der Version 3 der Oracle NoSQL Datenbank sind erste Sicherheitsfeatures integriert.

Die Kommunikation zwischen dem Client und der Datenbank lässt sich mit SSL verschlüsseln, ein User Login kann eingerichtet werden.

Allerdings ist ein echtes Schema Konzept, wie in der Oracle RDBMS noch nicht umgesetzt.

Vorbereitung

Für das Einrichten des Stores muss das Java Werkzeug „keytool“ im Pfad liegen!

Auf allen Knoten bei Bedarf entsprechend verlinken!

#als root
ln -s /usr/java/jdk1.8.0_05/bin/keytool /usr/bin/keytool

Netzwerk Verschlüsselung

SSL Verschlüsselung über das Netzwerk kann aktiviert werden.

User Login

In der EE Edition kann eine Oracle Wallet für das Passwort verwendet werden.

Nachträglich eine Security Konfiguration hinzufügen in einer CE Edition

Ablauf:

  • Store stoppen
  • Basis Security Configuration anlegen
    java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar securityconfig 
     
    security-> config create -pwdmgr pwdfile  -root /opt/oracle/kvdata/NODE01/KVStore
    Enter a password for the Java KeyStore:
    Re-enter the KeyStore password for verification:
    Created files
        /opt/oracle/kvdata/NODE01/KVStore/security/store.trust
        /opt/oracle/kvdata/NODE01/KVStore/security/client.trust
        /opt/oracle/kvdata/NODE01/KVStore/security/security.xml
        /opt/oracle/kvdata/NODE01/KVStore/security/store.passwd
        /opt/oracle/kvdata/NODE01/KVStore/security/client.security
        /opt/oracle/kvdata/NODE01/KVStore/security/store.keys
  • Verzeichnis security auf alle KVRROOT's und Knoten verteilen
    cd /opt/oracle/kvdata/NODE01/KVStore/
     
    cp -r security /opt/oracle/kvdata/NODE02/KVStore/
    cp -r security /opt/oracle/kvdata/NODE03/KVStore/
  • Security Information in jeder config.xml auf allen Knoten hinzufügen
    security-> config add-security -root /opt/oracle/kvdata/NODE01/KVStore -secdir security  -config config.xml
    Configuration updated.
    security-> config add-security -root /opt/oracle/kvdata/NODE02/KVStore -secdir security  -config config.xml
    Configuration updated.
    security-> config add-security -root /opt/oracle/kvdata/NODE03/KVStore -secdir security  -config config.xml
    Configuration updated.
  • Store wieder starten
  • Am Store as Admin im Security Mode anmelden
    java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar runadmin -port 5100 -host myserver -security $KVROOT/security/client.security
     
    Logged in admin as anonymous
     
    kv->
  • Admin User anlegen
     
     
    kv-> plan create-user -name root -admin -wait
    Enter the new password: 
    Re-enter the new password: 
    Executed plan 15, waiting for completion...
    Plan 15 ended successfully
     
    show user -name root
    user: id=u1 name=root enabled=true type=LOCAL retain-passwd=inactive granted-roles=[public, sysadmin]
  • testen mit
    java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar runadmin -port 5100 -host myserver -security $KVROOT/security/client.security -username root
  • Pwd File für diesen User anlegen
    java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar securityconfig pwdfile  create -file $KVROOT/security/root.pwd
    java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar securityconfig pwdfile secret  -file $KVROOT/security/root.pwd -set -alias root -secret MyRootPWD
  • Security Config anlegen
    cd $KVROOT/security
    # use this as template
    cp client.security root_user.security
    #edit the entries
    vi root_user.security
     
    oracle.kv.ssl.trustStore=client.trust
    oracle.kv.transport=ssl
    oracle.kv.ssl.protocols=TLSv1.2,TLSv1.1,TLSv1
    oracle.kv.ssl.hostnameVerifier=dnmatch(CN\=NoSQL)
    oracle.kv.auth.pwdfile.file=root.pwd
    oracle.kv.auth.username=root
  • testen
    java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar runadmin -port 5100 -host myserver -security /u00/app/oracle/kvdata/NODE01/KVStore/security/root_user.security
  • Datei root.pwd und root_user.security auf alle Knoten verteilen
    cd /opt/oracle/kvdata/NODE01/KVStore/security 
     
    cp root.pwd root_user.security /opt/oracle/kvdata/NODE02/KVStore/security 
    cp root.pwd root_user.security /opt/oracle/kvdata/NODE03/KVStore/security 

Nach dem Einrichten des Root Users keine Daten mehr sichtbar!

Per Default erhält der User die Rollen :

kv-> show user -name root
user: id=u1 name=root enabled=true type=LOCAL retain-passwd=inactive granted-roles=[public, sysadmin]

Damit kann der User „Root“ zwar den Store verwalten aber keine Daten sehen!

Role je nach Bedarf hinzufügen ( http://docs.oracle.com/cd/NOSQL/html/SecurityGuide/role_management.html#roles ):

plan grant -role readwrite -user root -wait

Nun kann der User root wieder alle Einträge im Store sehen!

Auditieren

In den Logfiles unter $KVSTORE/KVStore/log nach dem Key „KVAuditInfo“ greppen:

cd $KVSTORE/KVStore/log
 
grep KVAuditInfo  *

JMX Console verbinden

Der Truststore muss dazu angeben werden:

C:\Program Files (x86)\Java\jdk1.7.0_45\bin\jconsole -J-Djavax.net.ssl.trustStore="D:\\security\\client.trust"  myserver:5100

Logging Properies für die Fehlersuche „-J-Djava.util.logging.config.file=d:\log.properties“ verwenden

Wird der Pfad zum Zertifikat nicht hinterleg, erhält man den folgenden aussagekräftigen Fehler:

 Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: non-JRMP server at remote endpoint] Cause: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: non-JRMP server at remote endpoint]
java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: non-JRMP server at remote endpoint]
        at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:338)
        at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)

Mit dem Store in Java verbinden

Vorbereitung: Security Verzeichnis auf den Client kopieren

Normale Anmeldung an den Store mit Username/Password und Trust File für die SSL Verschlüsselung:

//Call back Handler für die erneute Authentifizierung
public static  ReauthenticateHandler reauthHandler;
 
......
 
// get the host to connect as first parameter
String host = "localhost:5000";
 
// get the store Name
String store = "KVStore";
 
// get the root user name
String username = "username";
 
// get the user password
String userpwd = "MyPWD";
 
// get the path to the trust file
String trustFile = "D:\\security\\client.trust";
 
 
......
 
 
try {
 
    KVStoreConfig kvconfig = new KVStoreConfig(store, host);
 
    /* Set the required security properties */
    Properties secProps = new Properties();
    secProps.setProperty(KVSecurityConstants.TRANSPORT_PROPERTY, KVSecurityConstants.SSL_TRANSPORT_NAME);
    secProps.setProperty(KVSecurityConstants.SSL_TRUSTSTORE_FILE_PROPERTY, trustFile);
 
    kvconfig.setSecurityProperties(secProps);
 
 
    // Store Zugriff
    kvstore =   KVStoreFactory.getStore(kvconfig, new PasswordCredentials(username, password.toCharArray()), reauthHandler);
 
} catch (AuthenticationFailureException afe) {    
    System.out.println("authentication failed!");
}

Über einen User Trust file mit „System.setProperty(„oracle.kv.security“, trustFile)„:

......
 
// get the host and port
String host = "localhost";
int port=5000;
 
// get the store Name
String store = "KVStore";
 
// get the path to the trust file
String trustFile = "D:\\security\\root_user.security";
 
......
 
 
....
    public CountRecords(String host, int port, String store, String trustFile) {
 
       #Trust file eines Users einbinden:
 
        System.setProperty("oracle.kv.security", trustFile);
 
        try {
            KVStoreConfig kvconfig = new KVStoreConfig(store, host + ":" + port);
 
           // Store Zugriff
            kvstore = KVStoreFactory.getStore(kvconfig);
        } catch (AuthenticationFailureException afe) {
           System.out.println("authentication failed!");
        }
    }
...

Security wieder auf NONE setzen

Um die Sicherheitseinstellungen wieder auszuschalten, muss die config.xml pro Knoten angepasst werden und ein Neustart des Stores ist notwendig.

Store zuvor stoppen!

Store Security wieder entfernen:

java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar securityconfig 
 
security->config remove-security -root /opt/oracle/kvdata/NODE01/KVStore
security->config remove-security -root /opt/oracle/kvdata/NODE02/KVStore
security->config remove-security -root /opt/oracle/kvdata/NODE03/KVStore

Und wieder starten

Zum erneuten Einschalten

Store stoppen.

Wieder erneut einbinden:

java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar securityconfig 
 
config add-security -root /opt/oracle/kvdata/NODE01/KVStore
config add-security -root /opt/oracle/kvdata/NODE02/KVStore
config add-security -root /opt/oracle/kvdata/NODE03/KVStore

Store erneut wieder starten.

Quellen

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
"Autor: Gunther Pipperr"
nosql/security_oracle_nosql_db_v3.txt · Zuletzt geändert: 2015/03/04 14:49 von Gunther Pippèrr