current_user() in views und SP's

Bigeddie

Neuer Benutzer
Beiträge
2
Hallo,

ich habe eine Tabelle "Mandant_User" in welcher ich eine 1:n Abbildung vornehme.
Die User sind Benutzer in MySQL, also im Format 'user'@'host'.

In weiteren Tabellen wird nur der Mandant angegeben um die Daten differenzieren zu können.

Beim Versuch einer Vorselektierung in einer normalen Abfrage wie z.B.

SELECT * FROM schnitzel where mandant = (select mandant from mandant_user WHERE user=current_user())
funktioniert das alles auch recht problemlos.
Bei dem Versuch das ganze in eine VIEW zu packen erhalte ich nur eine leere Liste als Resultat.
Gleiches gilt bei SP's

Für etwas hilfe wäre ich sehr dankbar.

Viele Grüße

Ernst
 
Werbung:
also mal vergleichsweise mit PostgreSQL gemacht:

Code:
test=*# select current_user;
 current_user
--------------
 akretschmer
(1 row)

test=*#
test=*#
test=*# create table foobar(id serial primary key, username text);
CREATE TABLE
test=*# insert into foobar (username) values ('akretschmer');
INSERT 0 1
test=*# insert into foobar (username) values ('sonstwer');
INSERT 0 1
test=*# insert into foobar (username) values ('hein blöd');
INSERT 0 1
test=*# insert into foobar (username) values ('max mustermann');
INSERT 0 1
test=*# create view view_foobar as select * from foobar where username = current_user;
CREATE VIEW
test=*# select * from view_foobar ;
 id |  username   
----+-------------
  1 | akretschmer
(1 row)

test=*#

works as expected.
 
Hallo,
ich habe das Problem gefunden.

Erstelle ich eine View mit
create view a_view
as
select....

so wird der Zugriff automatisch als
SQL SECURITY DEFINER
angenommen, selbst wenn es sich bei dem Aufrufer nicht um den Definer handelt.

Definiere ich eine VIEW jedoch mit
SQL SECURITY INVOKER
so liefert mir CURRENT_USER() innerhalb der View nicht den Ersteller, sondern den Aufrufer (sofern dieser die Rechte hat).

Trotzdem Danke, jetzt kann ich an meiner mandantenfähigen Datenbank weiterarbeiten.

Viele Grüße

Ernst
 
Werbung:
Zurück
Oben