Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
new.dba
Member

Откуда:
Сообщений: 28
Всем привет. Погуглил - не нашел, решил спросить у гуру...
Есть хп, выдаю доступ юзеру. Но он выполнить её не может т.к. у него нет прав на INSERT который выполняется внутри хп.
Вопрос: как можно разграничить юзера и таблицы, дабы он мог инсертить через хп, но не мог селектить?
15 июл 15, 10:44    [17893925]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
Glory
Member

Откуда:
Сообщений: 104760
new.dba
Есть хп, выдаю доступ юзеру. Но он выполнить её не может т.к. у него нет прав на INSERT который выполняется внутри хп.

потому что у процедуры и таблицы разные схемы надо полагать ?
15 июл 15, 10:54    [17893970]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
o-o
Guest
так и давать.
execute на процедуру и больше ничего.
читать не может, вставлять может только через процедуру:
create table dbo.t(id int);
go

create proc dbo.sp_t 
@id int
as
insert into dbo.t values(@id);
go

create user u1 without login;
grant execute on dbo.sp_t to u1;
go

execute as user = 'u1'
exec dbo.sp_t  1;

--(1 row(s) affected)

select *
from dbo.t;

--Msg 229, Level 14, State 5, Line 1
--The SELECT permission was denied on the object 't', database 'db1', schema 'dbo'.

insert into dbo.t values(2);

--Msg 229, Level 14, State 5, Line 1
--The INSERT permission was denied on the object 't', database 'db1', schema 'dbo'.
15 июл 15, 10:56    [17893986]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
new.dba
Member

Откуда:
Сообщений: 28
Glory
new.dba
Есть хп, выдаю доступ юзеру. Но он выполнить её не может т.к. у него нет прав на INSERT который выполняется внутри хп.

потому что у процедуры и таблицы разные схемы надо полагать ?

нет, и процедура и таблица - в схеме dbo созданы. если я правильно понял ваш вопрос.
15 июл 15, 11:07    [17894034]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
new.dba
Member

Откуда:
Сообщений: 28
o-o
так и давать.
execute на процедуру и больше ничего.
читать не может, вставлять может только через процедуру:
create table dbo.t(id int);
go

create proc dbo.sp_t 
@id int
as
insert into dbo.t values(@id);
go

create user u1 without login;
grant execute on dbo.sp_t to u1;
go

execute as user = 'u1'
exec dbo.sp_t  1;

--(1 row(s) affected)

select *
from dbo.t;

--Msg 229, Level 14, State 5, Line 1
--The SELECT permission was denied on the object 't', database 'db1', schema 'dbo'.

insert into dbo.t values(2);

--Msg 229, Level 14, State 5, Line 1
--The INSERT permission was denied on the object 't', database 'db1', schema 'dbo'.

Спасибо за пример, попробую у себя.
А что значит "create user u1 without login"? Юзер существующий, со своим паролем, SSMS ходит на сервер.
15 июл 15, 11:09    [17894049]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
Glory
Member

Откуда:
Сообщений: 104760
new.dba
нет, и процедура и таблица - в схеме dbo созданы. если я правильно понял ваш вопрос.

тогда все должно работать
15 июл 15, 11:10    [17894052]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
o-o
Guest
new.dba
А что значит "create user u1 without login"? Юзер существующий, со своим паролем, SSMS ходит на сервер.

это для меня, чтобы не создавать логин.
если юзер уже есть, его впишите в execute as.
ну или под ним зайдите и выполните.
15 июл 15, 11:16    [17894076]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
new.dba
Member

Откуда:
Сообщений: 28
Glory
new.dba
нет, и процедура и таблица - в схеме dbo созданы. если я правильно понял ваш вопрос.

тогда все должно работать

Может зависит от версии сервера? У нас 2008R2.
15 июл 15, 11:16    [17894077]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
o-o
Guest
new.dba
Glory
пропущено...

тогда все должно работать

Может зависит от версии сервера? У нас 2008R2.

не от сервера зависит, а от овнера.
даже при всех схемах dbo, у процедуры и у таблицы могут быть разные овнеры
15 июл 15, 11:17    [17894089]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
o-o
Guest
покажите результат вот этого
(вместо моих имен нужны ваши, от таблицы и от процедуры)
select name, principal_id, schema_id
from sys.objects
where name in ('t', 'sp_t');
15 июл 15, 11:21    [17894109]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
o-o
Guest
ну и вы не сказали, может они (sp и table) у вас в разных базах сидят?
или таблица -- не таблица, а вью, и смотрит оно в другую базу?
и базы не зачейнены..

в сообщении об ошибке пишут ровно тот объект, к-ый вы считаете таблицей?
15 июл 15, 11:24    [17894125]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
new.dba
Member

Откуда:
Сообщений: 28
да, забыл указать что хп в базе1, а удаляет из базы2. наверное это влияет? :(
15 июл 15, 11:28    [17894148]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
Glory
Member

Откуда:
Сообщений: 104760
new.dba
наверное это влияет

Да нет, что вы. А базы еще наверное на разных серверах ?
15 июл 15, 11:31    [17894161]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
new.dba
Member

Откуда:
Сообщений: 28
o-o
покажите результат вот этого
(вместо моих имен нужны ваши, от таблицы и от процедуры)
select name, principal_id, schema_id
from sys.objects
where name in ('t', 'sp_t');


в базе где таблица запускаю
select name, principal_id, schema_id
from sys.objects
where name in ('depar_award', 'sp_delFrom_depar_award');
возвращает
name principal_id schema_id
depar_award NULL 1
если в базе где хп создана
name principal_id schema_id
sp_delFrom_depar_award NULL 1
15 июл 15, 11:31    [17894163]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
new.dba
Member

Откуда:
Сообщений: 28
Glory
new.dba
наверное это влияет

Да нет, что вы. А базы еще наверное на разных серверах ?

Сервер один. У меня нет понимания с выдачей прав, так сложилось :(
Я уже понял что права можно разграничить на инсерт в таблицу и на инсерт в таблицу через хп, some experience gained
15 июл 15, 11:35    [17894191]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
Glory
Member

Откуда:
Сообщений: 104760
new.dba
У меня нет понимания с выдачей прав, так сложилось :(

А с чтением хелпа у вас как сложилось ?
15 июл 15, 11:39    [17894212]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
o-o
Guest
new.dba,
Ownership Chains
короче, все сводится к включению на обеих базах db_chaining on.
но почитайте вообще к чему это может привести
15 июл 15, 11:45    [17894260]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
new.dba
Member

Откуда:
Сообщений: 28
Glory
new.dba
У меня нет понимания с выдачей прав, так сложилось :(

А с чтением хелпа у вас как сложилось ?

Читал, местами...
Правильно ли я понимаю что для создания хп которая будет взаимодействовать с таблицей - её нужно создавать в той же бд где и таблица?
А если хп которая джойнит таблицы из разных бд, и далее инсерт выполняет? Её нужно создавать в той бд где выполняется инсерт?
15 июл 15, 11:46    [17894266]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
Glory
Member

Откуда:
Сообщений: 104760
new.dba
Читал, местами...

Входили ли в эти "места" статья Ownership Chains ?

new.dba
Правильно ли я понимаю что для создания хп которая будет взаимодействовать с таблицей - её нужно создавать в той же бд где и таблица?
А если хп которая джойнит таблицы из разных бд, и далее инсерт выполняет? Её нужно создавать в той бд где выполняется инсерт?

Вы не знаете, что полное имя таблицы выглядит как server_name.database_name.schema_name.table_name ?
15 июл 15, 11:51    [17894288]     Ответить | Цитировать Сообщить модератору
 Re: Права на выполнение sp без доступа к таблицам используемым в ней.  [new]
new.dba
Member

Откуда:
Сообщений: 28
Glory
new.dba
Читал, местами...

Входили ли в эти "места" статья Ownership Chains ?

new.dba
Правильно ли я понимаю что для создания хп которая будет взаимодействовать с таблицей - её нужно создавать в той же бд где и таблица?
А если хп которая джойнит таблицы из разных бд, и далее инсерт выполняет? Её нужно создавать в той бд где выполняется инсерт?

Вы не знаете, что полное имя таблицы выглядит как server_name.database_name.schema_name.table_name ?


Нет, про Ownership Chains к своему стыду слышу впервые. Почитаю.
"выглядит как server_name.database_name.schema_name.table_name" - конечно знаю )
15 июл 15, 12:10    [17894362]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить