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 Sie einen Fremdserver für das Verzeichnis (erfordert DBA-Berechtigung).
Erstellen Sie externe Logins für die Datenbankbenutzer, die den Verzeichniszugriffsserver benutzen können (erfordert DBA-Berechtigung).
Erstellen Sie Proxy-Tabellen für den Zugriff auf die Verzeichnisse des Computers (erfordert RESOURCE-Berechtigung).
Stellen Sie als DBA eine Verbindung mit der Host-Datenbank her.
Benutzen Sie die Anweisung CREATE SERVER, um einen Fremdserver zu erstellen.
Beispiel:
CREATE SERVER my_dir_tree CLASS 'directory' USING 'root=c:\Program Files'; |
Benutzen Sie die Anweisung CREATE EXTERNLOGIN, um ein externes Login zu erstellen.
Beispiel:
CREATE EXTERNLOGIN DBA TO my_dir_tree; |
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.
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; |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |