Skip to content
 

Oracle: Readonly != Readonly ??

Tanel Poder beschreibt in seinem Blog-Eintrag “Your read only accounts aren’t that read only”, dass Benutzer mit ausschliesslich Select-Rechten Tabellen locken können. Damit besteht die Gefahr, dass diese Benutzer Applikationen komplett lahmlegen können. Tanel liefert auch einen (mühsamen) Workaround.

Durch diesen Bericht bin ich wieder einmal auf die Idee gekommen, zu testen, ob sich im “Readonly-Verhalten” von Oracle etwas geändert hat.

Fall 1: Readonly Tablespace

Ist ein Readonly Tablespace wirklich readonly? Testen wir es mal aus:

SQL> CREATE TABLESPACE test_ro datafile '/u01/oradata/SVV1110/test_ro01SVV1110.dbf' SIZE 10M;
TABLESPACE created.
 
SQL> CREATE TABLE t1(f1 NUMBER) TABLESPACE test_ro;
TABLE created.
 
SQL> ALTER TABLESPACE test_ro READ ONLY;
TABLESPACE altered.
 
SQL> DROP TABLE t1;
TABLE dropped.

Also – die Tabelle lässt sich problemlos löschen…
Nun kann man hier durchaus sagen, dass sich in dem Readonly Tablespace nichts geändert hat, es wurden nur ein paar Einträge im Data Dictionary angepasst. Aber ob dies denjenigen interessiert, dessen Tabelle gelöscht wurde??

Fall 2: Readonly Tables

Seit Oracle Database 11g können auch einzelne Tabellen auf readonly gesetzt werden. Und – können die danach auch gelöscht werden?

SQL> CREATE TABLE t2(f1 NUMBER) TABLESPACE users;
TABLE created.
 
SQL> ALTER TABLE t2 READ ONLY;
TABLE altered.
 
SQL> DROP TABLE t2;
TABLE dropped.

Klar – kein Problem.
Auch hier der Versuch einer Begründung: Die Tabelle ist ja nicht gelöscht, sondern im Recyclebin. Kann sie dann von dort gelöscht werden?

SQL> SELECT object_name,  original_name FROM user_recyclebin;
 
OBJECT_NAME                    ORIGINAL_NAME
------------------------------ --------------------------------
BIN$PznB3DeNjPTgQKjAC6BFsg==$0 T2
 
SQL> PURGE RECYCLEBIN;
Recyclebin purged.
 
SQL> SELECT object_name,  original_name FROM user_recyclebin;
no ROWS selected

Auch dies geht.

Also mein Verständnis von Readonly ist etwas anders. Aber DML-Operationen und Truncate bringen doch wenigstens eine Fehlermeldung…

Leave a Reply