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

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Datenbankadministration » Konfiguration Ihrer Datenbank » Benutzer-IDs und Berechtigungen verwalten

 

Namen von Datenbankobjekten und Präfixe

Der Name eines jeden Datenbankobjekts ist ein Bezeichner.

Hinweise zu den Regeln für gültige Bezeichner finden Sie unter Bezeichner.

In Abfragen und Beispiel-SQL-Anweisungen in dieser Dokumentation wird im Allgemeinen mit dem einfachen Namen auf Datenbankobjekte aus der Beispieldatenbank Bezug genommen. Zum Beispiel:

SELECT *
FROM Employees;

Tabellen, Prozeduren und Ansichten haben alle einen Eigentümer. Die Benutzer-ID DBA hat die Tabellen in der Beispieldatenbank erstellt. In einigen Fällen müssen Sie dem Objektnamen den Namen des Eigentümers voranstellen, wie im folgenden Beispiel:

SELECT *
FROM DBA.Employees;

Der Bezug auf die Tabelle "Employees" wird als qualifiziert bezeichnet. In anderen Fällen ist es ausreichend, den Objektnamen anzugeben. In diesem Abschnitt wird beschrieben, wann Sie das Eigentümerpräfix verwenden müssen, um Tabellen, Ansichten und Prozeduren zu bezeichnen, und wann nicht.

Wenn Sie Bezug auf ein Datenbankobjekt nehmen, müssen Sie ein Präfix angeben, es sei denn:

  • Sie sind der Eigentümer des Datenbankobjekts.

  • Das Datenbankobjekt ist Eigentum einer Gruppen-ID, deren Mitglied Sie sind.

Beispiel

Beachten Sie das folgende Beispiel für eine Unternehmensdatenbank. Die Benutzer-ID company hat alle Tabellen erstellt, und da diese Benutzer-ID dem Datenbankadministrator gehört, verfügt sie somit über DBA-Berechtigung.

CREATE USER Company
IDENTIFIED BY secret;
GRANT DBA TO Company;

Die Benutzer-ID "company" hat die Tabellen in der Datenbank erstellt.

CONNECT USER company IDENTIFIED BY secret;
CREATE TABLE company.Customers ( ... );
CREATE TABLE company.Products ( ... );
CREATE TABLE company.Orders ( ... );
CREATE TABLE company.Invoices ( ... );
CREATE TABLE company.Employees ( ... );
CREATE TABLE company.Salaries ( ... );

Nicht jeder im Unternehmen sollte Zugriff auf alle Daten erhalten. Angenommen, es gibt zwei Benutzer-IDs in der Verkaufsabteilung, Joe und Sally. Diese sollen Zugriff auf die Tabellen "Customers", "Products" und "Orders" erhalten. Dafür erstellen Sie die Gruppe "Sales".

CREATE USER Sally IDENTIFIED BY xxxxx;
CREATE USER Joe IDENTIFIED BY xxxxx;
CREATE USER Sales IDENTIFIED BY xxxxx;
GRANT GROUP TO Sales;
GRANT ALL ON Customers TO Sales;
GRANT ALL ON Orders TO Sales;
GRANT SELECT ON Products TO Sales;
GRANT MEMBERSHIP IN GROUP Sales TO Sally;
GRANT MEMBERSHIP IN GROUP Sales TO Joe;

Jetzt haben Joe und Sally die Berechtigung, diese Tabellen zu benutzen, Sie müssen aber immer noch ihre Tabellenreferenzen qualifizieren, weil der Tabelleneigentümer "Company" ist und Sally und Joe nicht Mitglied der Gruppe "Company" sind:

SELECT *
FROM company.Customers;

Um diese Situation zu korrigieren, fügen Sie der Gruppe "Company" das Mitglied "Sales" hinzu.

GRANT GROUP TO Company;
GRANT MEMBERSHIP IN GROUP Company TO Sales;

Jetzt sind Joe und Sally als Mitglieder der Gruppe "Sales" indirekt Mitglieder der Gruppe "Company" und können ihre Tabellen ohne Qualifizierer referenzieren. Der folgende Befehl ist nun möglich:

SELECT *
FROM Customers;
Hinweis

Joe und Sally haben aufgrund ihrer Mitgliedschaft in der Gruppe "company" keine besonderen Berechtigungen. Der Gruppe "company" wurden nicht ausdrücklich Tabellenberechtigungen erteilt. (Die Benutzer-ID "company" verfügt über die implizite Berechtigung, Tabellen wie "Salaries" einzusehen, weil sie die Tabellen erstellt hat und über DBA-Berechtigung verfügt.) Daher erhalten Joe und Sally immer noch eine Fehlermeldung bei einem der folgenden Befehle:

SELECT *
FROM Salaries;
SELECT *
FROM company.Salaries;

In beiden Fällen verfügen Joe und Sally nicht über die Berechtigung zum Einsehen der Tabelle "Salaries".