02_Rights

Code-Dateien

DateinameAktion
CODECode_Rights.zipDownload

PDF-Dokumente

DateinameAktion
PDFFolie_Rights.pdfÖffnen
PDFUebung_001.pdfÖffnen

Videos

DateinameAktion
VIDEOVideo_Right_DAbspielen
VIDEOVideo_Right_EAbspielen
VIDEOVideo_Rights_Slides_DAbspielen
VIDEOVideo_Rights_Slides_EAbspielen

Lernmaterialien

Delete

System

   DROP TABLESPACE TBS_GRIESMAYER_RIGHTS INCLUDING CONTENTS AND DATAFILES;
   DROP USER BANK CASCADE;
   DROP USER GRIESMAYER CASCADE;

Alle User und Tablespaces werden gelöscht.

Anlegen

Tablespace

System

   CREATE SMALLFILE TABLESPACE TBS_GRIESMAYER_RIGHTS
   DATAFILE '/opt/oracle/oradata/XE/XEPDB1/r1.dbf' SIZE 10M,
            '/opt/oracle/oradata/XE/XEPDB1/r2.dbf' SIZE  5M
   LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
001.png

Check

docker exec -it oracle21c /bin/bash
cd oradata/
cd XE
cd XEPDB1/
ls -l
total 2283972
-rw-r----- 1 oracle oinstall  10493952 Dec  2 12:06 r1.dbf
-rw-r----- 1 oracle oinstall   5251072 Dec  2 12:06 r2.dbf

User

System

   CREATE USER GRIESMAYER PROFILE "DEFAULT" IDENTIFIED BY "oracle"
   DEFAULT TABLESPACE TBS_GRIESMAYER_RIGHTS
   TEMPORARY TABLESPACE TEMP
   ACCOUNT UNLOCK;

   GRANT SELECT ANY DICTIONARY TO GRIESMAYER;

griesmayer

002.png

Das CONNECT Recht fehlt und somit ist ein login nicht möglich.

System

   GRANT CONNECT TO GRIESMAYER;

griesmayer

SELECT   tablespace_name
FROM     dba_tablespaces
ORDER BY tablespace_name;

5 TBS_GRIESMAYER_RIGHTS

System

   CREATE USER BANK PROFILE "DEFAULT" IDENTIFIED BY "oracle"
   DEFAULT TABLESPACE TBS_GRIESMAYER_RIGHTS
   TEMPORARY TABLESPACE TEMP
   ACCOUNT LOCK;
003.png

Table

System

  GRANT CREATE TABLE TO GRIESMAYER;

Der User GRIESMAYER kann im eigenen Schema Tabellen anlegen.

griesmayer

   CREATE TABLE CUSTOMER
   (
      CUSTOMER_ID INTEGER,
      FIRST_NAME  VARCHAR(30),
      BALANCE     DECIMAL(8,2)
   );
004.png

System

   GRANT CREATE ANY TABLE TO GRIESMAYER;

griesmayer

   CREATE TABLE BANK.CUSTOMER
   (
      CUSTOMER_ID INTEGER,
      FIRST_NAME  VARCHAR(30),
      BALANCE     DECIMAL(8,2)
   );
005.png

System

   GRANT DROP TABLE TO GRIESMAYER;
   GRANT DROP ANY TABLE TO GRIESMAYER;

Wie oben nur zum Löschen.

System

   GRANT RESOURCE TO GRIESMAYER;

Quota

Eine Quota in Oracle ist ein Speicherlimit, das einem Benutzer für ein bestimmtes Tablespace zugewiesen wird.

Quotas dienen dazu:

  • Speicherverbrauch von Benutzern zu kontrollieren

  • zu verhindern, dass ein Benutzer den Tablespace vollschreibt

  • Ressourcen gerechter zu verteilen

  • Ordnung und Sicherheit in großen Datenbanken zu erhalten

System

ALTER USER GRIESMAYER QUOTA 1M ON TBS_GRIESMAYER_RIGHTS;
ALTER USER BANK QUOTA 1M ON TBS_GRIESMAYER_RIGHTS;
006.png

Object Rights

Table

System

   GRANT INSERT, SELECT ON BANK.CUSTOMER TO GRIESMAYER;

griesmayer

   INSERT INTO BANK.CUSTOMER VALUES (1, 'Max', 500);

View

System

   GRANT CREATE ANY VIEW TO GRIESMAYER;

griesmayer

   CREATE VIEW BANK.CUSTOMER_NOAMOUNT AS
   (
      SELECT CUSTOMER_ID,
             FIRST_NAME
      FROM   BANK.CUSTOMER
   );
007.png

Es können auch SELECT, DELETE, INSERT und UPDATE Rechte auf die View vergeben werden. In der View können Spalten ausgeblendet werden!

System

   GRANT SELECT, UPDATE ON BANK.CUSTOMER_NOAMOUNT TO GRIESMAYER;

Sequence

Eine Sequence in Oracle ist ein Objekt, das fortlaufende, eindeutige Nummern erzeugt – meistens für Primärschlüssel wie ID-Spalten.

System

   GRANT CREATE ANY SEQUENCE TO GRIESMAYER;
   GRANT SELECT ANY SEQUENCE TO GRIESMAYER;

griesmayer

   CREATE SEQUENCE BANK.SEQ_CUSTOMER_ID START WITH 100;

   SELECT BANK.SEQ_CUSTOMER_ID.NEXTVAL
   FROM   DUAL;

   INSERT INTO BANK.CUSTOMER
   SELECT BANK.SEQ_CUSTOMER_ID.NEXTVAL,
          'Thomas',
          CAST((DBMS_RANDOM.VALUE*2000-500) AS DECIMAL(10,2))
   FROM   BANK.CUSTOMER;

Roles

008.png

Rechte können auch an Rollen vergeben werden.

Benutzer werden dann Rollen zugewiesen.

System

   CREATE ROLE MARKETING;
   GRANT SELECT ON BANK.CUSTOMER TO MARKETING;
   GRANT MARKETING TO GRIESMAYER;

Test Quota

griesmayer

INSERT INTO BANK.CUSTOMER VALUES (BANK.SEQ_CUSTOMER_ID.NEXTVAL, 'Thomas', 500);

INSERT INTO BANK.CUSTOMER
SELECT BANK.SEQ_CUSTOMER_ID.NEXTVAL,
       'Thomas',
       500
FROM   BANK.CUSTOMER;


INSERT INTO BANK.CUSTOMER
SELECT BANK.SEQ_CUSTOMER_ID.NEXTVAL,
       'Thomas',
       500
FROM   BANK.CUSTOMER;


...


Error starting at line : 1 in command -
INSERT INTO BANK.CUSTOMER
SELECT BANK.SEQ_CUSTOMER_ID.NEXTVAL,
       'Thomas',
       500
FROM   BANK.CUSTOMER
Error report
ORA-01536: space quota exceeded for tablespace 'TBS_GRIESMAYER_RIGHTS'