FirebirdSQL / firebird

Firebird server, client and tools
https://firebirdsql.org
1.26k stars 217 forks source link

Incorrect EFFECTIVE_USER in functions #8295

Open asfernandes opened 3 weeks ago

asfernandes commented 3 weeks ago
isql -term ! -user dbo
create database 't.fdb' user dbo!

create or alter function oi returns varchar(15) sql security invoker as
begin return rdb$get_context('SYSTEM', 'EFFECTIVE_USER'); end!

create or alter function od returns varchar(15) sql security definer as
begin return rdb$get_context('SYSTEM', 'EFFECTIVE_USER'); end!

create or alter procedure oi returns (o varchar(15)) sql security invoker as
begin o = rdb$get_context('SYSTEM', 'EFFECTIVE_USER'); end!

create or alter procedure od returns (o varchar(15)) sql security definer as
begin o = rdb$get_context('SYSTEM', 'EFFECTIVE_USER'); end!

grant execute on function oi to public!
grant execute on function od to public!
grant execute on procedure oi to public!
grant execute on procedure od to public!
isql t.fdb -term ! -user u1

-- Correct: U1
execute procedure oi!

-- Correct: DBO
execute procedure od!

-- Correct: U1
select oi() from rdb$database!

-- Incorrect: U1
select od() from rdb$database!