Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Ferndatenzugriff und Arbeit mit Massendaten » Ferndatenzugriff » Verzeichniszugriffsserver

 

Erstellen von Verzeichniszugriffsservern (SQL)

Administratoren können in Interactive SQL die CREATE SERVER-Anweisung verwenden, um Verzeichniszugriffsserver zu erstellen.

Voraussetzungen

DBA-Berechtigung.

RESOURCE-Berechtigung.

Kontext und Bemerkungen

Viele.

 Erstellen und Konfigurieren eines Verzeichniszugriffsservers
  1. Erstellen Sie einen Fremdserver für das Verzeichnis (erfordert DBA-Berechtigung).

  2. Erstellen Sie externe Logins für die Datenbankbenutzer, die den Verzeichniszugriffsserver benutzen können (erfordert DBA-Berechtigung).

  3. Erstellen Sie Proxy-Tabellen für den Zugriff auf die Verzeichnisse des Computers (erfordert RESOURCE-Berechtigung).

  1. Stellen Sie als DBA eine Verbindung mit der Host-Datenbank her.

  2. Benutzen Sie die Anweisung CREATE SERVER, um einen Fremdserver zu erstellen.

    Beispiel:

    CREATE SERVER my_dir_tree
    CLASS 'directory'
    USING 'root=c:\Program Files';
  3. Benutzen Sie die Anweisung CREATE EXTERNLOGIN, um ein externes Login zu erstellen.

    Beispiel:

    CREATE EXTERNLOGIN DBA TO my_dir_tree;
  4. Benutzen Sie die Anweisung CREATE EXISTING TABLE, um eine Proxy-Tabelle für das Verzeichnis zu erstellen.

    Beispiel:

    CREATE EXISTING TABLE my_program_files AT 'my_dir_tree;;;.';

    In diesem Beispiel ist "my_program_files" der Name des Verzeichnisses, und "my_dir_tree" ist der Name des Verzeichniszugriffsservers.

Ergebnisse

Der Verzeichniszugriffsserver wird erstellt und konfiguriert.

Nächste Schritte

Keiner

Beispiel

Durch Ausführen der nachfolgenden Anweisungen wird Folgendes erstellt:

  • Ein neuer Verzeichniszugriffsserver mit dem Namen directoryserver3, der für den Zugriff auf bis zu drei Unterverzeichnisebenen verwendet werden kann

  • Ein externes Login zum Verzeichniszugriffsserver für den DBA-Benutzer

  • Eine Proxy-Tabelle mit dem Namen diskdir3

CREATE SERVER directoryserver3
CLASS 'DIRECTORY'
USING 'ROOT=c:\mydir;SUBDIRS=3';
CREATE EXTERNLOGIN DBA TO directoryserver3;
CREATE EXISTING TABLE diskdir3 AT 'directoryserver3;;;.';

Mithilfe der sp_remote_tables-Systemprozedur können Sie alle Unterverzeichnisse anzeigen, die sich unter c:\mydir auf dem Computer befinden, auf dem der Datenbankserver ausgeführt wird:

CALL sp_remote_tables( 'directoryserver3' );

Mit der folgenden SELECT-Anweisung können Sie den Inhalt der Datei c:\mydir\myfile.txt anzeigen:

SELECT contents
FROM diskdir3
WHERE file_name = 'myfile.txt';

Alternativ können Sie folgendermaßen Daten aus den Verzeichnissen wählen:

-- Get the list of directories in this disk directory tree.
SELECT permissions, file_name, size
FROM diskdir3
WHERE PERMISSIONS LIKE 'd%';
-- Get the list of files.
SELECT permissions, file_name, size
FROM diskdir3
WHERE PERMISSIONS NOT LIKE 'd%';

Beispiel

Nehmen wir an, Sie sind DBA und verfügen über eine Datenbank, die manchmal auf Computer A gestartet wird, mit dem Datenbankserver namens server1, und zu anderen Zeiten auf Computer B gestartet wird, mit dem Server namens server2. Nehmen wir an, Sie wollen einen Verzeichniszugriffsserver einrichten, der sowohl auf das lokale Laufwerk d:\users auf Computer B als auch auf das Netzwerkserver-Laufwerk w:\users auf Computer A zeigt. Außerdem wollen Sie eine Proxy-Tabelle namens users/userM einrichten, aus der alle Benutzer die Liste ihrer eigenen Verzeichnisse abrufen können. Durch die Verwendung von Variablen in der USING-Klausel einer CREATE SERVER-Anweisung und in der AT-Klausel einer CREATE EXISTING TABLE-Anweisung können Sie diesen Anforderungen gerecht werden, indem Sie einen einzigen Verzeichniszugriffsserver und eine einzige Proxy-Tabelle erstellen, und zwar folgendermaßen:

  • Verzeichniszugriffsserver erstellen   Erstellen Sie den Verzeichniszugriffsserver mit Variablen für das Stammverzeichnis des Verzeichniszugriffsservers und die Unterverzeichnisebene.
    CREATE SERVER dir CLASS 'directory' USING 'root={@directory}\\users;subdirs={@subdirs}';

    Erstellen Sie explizite externe Logins für jeden Benutzer, der berechtigt ist, den Verzeichniszugriffsserver zu verwenden.

    CREATE EXTERNLOGIN DBA TO dir;
    CREATE USER user1 IDENTIFIED BY sql;
       CREATE EXTERNLOGIN user1 TO dir;
    CREATE USER user2 IDENTIFIED BY sql;
       CREATE EXTERNLOGIN user2 TO dir;
    CREATE USER userM IDENTIFIED BY sql;
       CREATE EXTERNLOGIN userM TO dir;
    

  • Eine Proxy-Tabelle erstellen   Verwenden Sie eines der Benutzerkonten, um eine Proxy-Tabelle zu erstellen, die auf das Verzeichnis @directory\users\@curuser auf dem Verzeichniszugriffsserver zeigt.
    CREATE VARIABLE @directory LONG VARCHAR;
       SET @directory = 'd:';
    CREATE VARIABLE @subdirs VARCHAR(10);
       SET @subdirs = '7';
    CREATE VARIABLE @curuser VARCHAR(128);
       SET @curuser = 'user1';
    CREATE VARIABLE @server VARCHAR(128);
       SET @server = 'dir';
    CREATE EXISTING TABLE dbo.userdir AT '{@server};;;{@curuser}';

    Die Variablen werden nicht mehr benötigt und können daher mithilfe der folgenden Anweisungen gelöscht werden:

    DROP VARIABLE @curuser;
    DROP VARIABLE @subdirs;
    DROP VARIABLE @directory;

    Löschen Sie die externe Login-Zuordnung für den DBA.

    DROP EXTERNLOGIN DBA TO dir;

  • Eine Prozedur erstellen   Erstellen Sie eine Prozedur, mit der alle Benutzer den Inhalt ihrer jeweiligen Benutzerverzeichnisse anzeigen können.


    CREATE PROCEDURE dbo.listmydir()
    BEGIN
       DECLARE @directory LONG VARCHAR;
       DECLARE @subdirs VARCHAR(10);
       DECLARE @server VARCHAR(128);
       DECLARE @curuser VARCHAR(128);
    -- For this example, the 'dir' remote data access server is always used.
       SET @server = 'dir'
    -- The root directory is based on the SQL Anywhere server the user is connected to.
       SET @directory = IF property('name') = 'server1' THEN 'w:' ELSE 'd:' ENDIF;
    -- The subdirectory limit is based on the connected user.
       SET @curuser = user_name();
    -- All users get a subdirectory limit of 7, except user2, who gets a limit of 1.
       SET @subdirs = CONVERT ( VARCHAR(10), IF @curuser = 'user2' THEN 1 ELSE 7 ENDIF);
    -- With all the variables set above, the proxy table dbo.userdir now points to @directory\@curuser
    -- and has a subdirectory limit of @subdirs.
       SELECT * FROM dbo.userdir;
    END;   


 Siehe auch