Функция Grant select on не работает - PullRequest
0 голосов
/ 07 мая 2020

У меня есть пользователь A, владеющий схемой, назовем его также A. Другой пользователь B владеет схемой B.

Пользователь A имеет встроенную функцию, которая возвращает набор данных из таблицы «A.Table».

Теперь я просто хочу, чтобы пользователь B использовал эти функции без учитывая возможность выбора в реальной таблице для пользователя B.

Обычно это работает, но по какой-то причине я не уверен, почему GRANT select для функции в схеме A для пользователя B не работает. Может кто-нибудь пролить свет на эту проблему?

1 Ответ

0 голосов
/ 07 мая 2020

Убедитесь, что функция принадлежит пользователю A (цепочка владения, права доступа к таблице не проверяются, если функция и таблица имеют одного и того же владельца)

--user A and schema A (owned by user A)
create user A without login
go
create schema A authorization A
go

--permissions to user A, create table&function
grant create table to A
go
grant create function to A
go

--user B
create user B without login
go

--user A
execute as user = 'A'
go

create table A.testtable(id int)
go

insert into A.testtable(id) values(1),(2);
go

create function A.testfunc()
returns 
table
as
return
(   
    select *
    from A.testtable
)
go

grant select on A.testfunc to B;
go

revert
go

--user B
execute as user = 'B'
go

--ownership chain, function and table in the function owned by the same user A (user A created the function)
select *
from A.testfunc()
go

revert
go

--change ownership of function, function is owned by dbo
alter authorization on A.testfunc to dbo
go

grant select on A.testfunc to  B
go


--try again as user B
execute as user = 'B'
go

--permission violation
--ownership chain broken: function and referenced table (A.testtable in the function) are not owned by the same user...
select *
from A.testfunc()
go

revert
go
--cleanup
drop function A.testfunc
go
drop table A.testtable
go
drop schema A
go
drop user A
go
drop user B
go
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...