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

Откуда:
Сообщений: 8
Есть "продукт"
при переносе с 2000 на 2008 в нём всё развалилось и в процессе осознания проблемы удалось выяснить:

для определения доступных пользователю колонок и последующего "умного" выбора только доступных этому юзеру "продукт" шарит в [Information_schema]

mssql2000 при использовании "column permissions" не отражает недоступные пользователю колонки в Information_schema

mssql2008 отображает схему полностью независимо от прав юзера

как быть?
это нормальное поведение для 2000/2008?
может где-то настраивается?
7 апр 16, 11:27    [19026821]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2000 2008 Information_schema  [new]
Glory
Member

Откуда:
Сообщений: 104760
dreamer2
при переносе с 2000 на 2008 в нём всё развалилось

уронили что ли ?

dreamer2
mssql2000 при использовании "column permissions" не отражает недоступные пользователю колонки в Information_schema

mssql2008 отображает схему полностью независимо от прав юзера

Что такое "column permissions"/"Information_schema" ? Запросы такие ?
7 апр 16, 11:31    [19026852]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2000 2008 Information_schema  [new]
dreamer2
Member

Откуда:
Сообщений: 8
[Information_schema] содержит данные о базах сервера
SELECT * FROM [Information_schema].[Columns] отображает данные о колонках баз

column permissions это когда в таблице select разрешается не на всю таблицу, только выборочно на колонки
7 апр 16, 11:34    [19026876]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2000 2008 Information_schema  [new]
Glory
Member

Откуда:
Сообщений: 104760
dreamer2
SELECT * FROM [Information_schema].[Columns] отображает данные о колонках баз

column permissions это когда в таблице select разрешается не на всю таблицу, только выборочно на колонки

INFORMATION_SCHEMA.COLUMNS (Transact-SQL)
Returns one row for each column that can be accessed by the current user in the current database.
7 апр 16, 11:37    [19026894]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2000 2008 Information_schema  [new]
dreamer2
Member

Откуда:
Сообщений: 8
Glory
INFORMATION_SCHEMA.COLUMNS (Transact-SQL)
Returns one row for each column that can be accessed by the current user in the current database.

И?
я написал в чем различается поведение 2000 и 2008, цитата из описания ничего не объясняет
7 апр 16, 11:39    [19026908]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2000 2008 Information_schema  [new]
Glory
Member

Откуда:
Сообщений: 104760
dreamer2
я написал в чем различается поведение 2000 и 2008,

Вы написали, что вы думаете.
А я написал, что написано в хелпе.
7 апр 16, 11:41    [19026920]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2000 2008 Information_schema  [new]
dreamer2
Member

Откуда:
Сообщений: 8
Glory
Вы написали, что вы думаете.
А я написал, что написано в хелпе.

я не думаю, я описываю существующую ситуацию

в случае sql 2000 пользователь имея доступ к колонкам a и c но не имея доступа к b видит в инф.схеме только свои a и c
в случае sql 2008 с аналогичными правами пользователь видит всю структуру таблицы

поэтому получаем что колонка b не может быть accessed, но присутствует в схеме, что прямо противоречит цитате из хелпа
7 апр 16, 11:51    [19026965]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2000 2008 Information_schema  [new]
Glory
Member

Откуда:
Сообщений: 104760
dreamer2
я не думаю, я описываю существующую ситуацию

Вот именно, что вы "описываете"

dreamer2
в случае sql 2000 пользователь имея доступ к колонкам a и c но не имея доступа к b видит в инф.схеме только свои a и c
в случае sql 2008 с аналогичными правами пользователь видит всю структуру таблицы

И чем вы докажите "аналогичность прав" ?

dreamer2
поэтому получаем что колонка b не может быть accessed, но присутствует в схеме, что прямо противоречит цитате из хелпа

Пока получается, что вы не проверили "аналогичность прав"
7 апр 16, 11:54    [19026988]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2000 2008 Information_schema  [new]
dreamer2
Member

Откуда:
Сообщений: 8
Glory,

автор
Сообщение 230, уровень 14, состояние 1, строка 1
Запрещено разрешение "SELECT" на столбец "b" объекта "test", базы данных "test", схемы "dbo".


чем ещё это можно доказать?

может еще тем, что база детачилась и переносилась на 2008 1в1?
7 апр 16, 11:59    [19027017]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2000 2008 Information_schema  [new]
Glory
Member

Откуда:
Сообщений: 104760
dreamer2
чем ещё это можно доказать?

Права сравниваются списком
7 апр 16, 12:04    [19027034]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2000 2008 Information_schema  [new]
dreamer2
Member

Откуда:
Сообщений: 8
sp_table_privileges и sp_column_privileges показывают, что у пользователя нет прав на колонку b

одинаково на 2000 и 2008
7 апр 16, 12:42    [19027230]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2000 2008 Information_schema  [new]
aleks2
Guest
dreamer2
sp_table_privileges и sp_column_privileges показывают, что у пользователя нет прав на колонку b

одинаково на 2000 и 2008

Чо, прям явный запрет юзеру X пользовать колонку Y, а она в INFORMATION_SCHEMA есть?
А для таблицы?

ЗЫ. А как насчет обновлений на сервере?
7 апр 16, 13:31    [19027525]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2000 2008 Information_schema  [new]
Glory
Member

Откуда:
Сообщений: 104760
Похоже на багофичу
CREATE LOGIN testlogin1 WITH PASSWORD = 'testlogin1', CHECK_POLICY=OFF
go
use testdb
go
CREATE USER testuser1 FOR LOGIN testlogin1
go
if object_id('dbo.Table1') is not null drop table dbo.Table1
go
create table dbo.Table1 (f1 int, f2 int, f3 int)
go
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='Table1'
--SELECT * FROM sys.columns WHERE object_id=object_id('dbo.Table1')
go
execute as user='testuser1';
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='Table1'
--SELECT * FROM sys.columns WHERE object_id=object_id('dbo.Table1')
go
revert
go
GRANT SELECT ON [dbo].[Table1] ([f2]) TO [testuser1]
DENY SELECT ON [dbo].[Table1] ([f1]) TO [testuser1]
DENY SELECT ON [dbo].[Table1] ([f3]) TO [testuser1]
go
execute as user='testuser1';
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='Table1'
--SELECT * FROM sys.columns WHERE object_id=object_id('dbo.Table1')
go
revert
go

if object_id('dbo.Table1') is not null drop table dbo.Table1
go
drop user testuser1
go
drop login testlogin1
go

Microsoft SQL Server 2014 - 12.0.4100.1 (X64)
Apr 20 2015 17:29:27
Copyright (c) Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
7 апр 16, 13:49    [19027627]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2000 2008 Information_schema  [new]
dreamer2
Member

Откуда:
Сообщений: 8
aleks2
Чо, прям явный запрет юзеру X пользовать колонку Y, а она в INFORMATION_SCHEMA есть?
А для таблицы?
ЗЫ. А как насчет обновлений на сервере?

если запрет на таблицу или разрешений даже для одной колонки нет - ничего и не отображает
если разрешение на одну колонку есть, другие могут быть и с запретом - отображает все равно всё полностью

версия 10.50.2550.0 - Security Update for SQL Server 2008 R2 Service Pack 1
поднять повыше?

Glory
Похоже на багофичу

так чего там на 2014?

мой выдаёт туже фигню как с моей базой
7 апр 16, 14:08    [19027740]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2000 2008 Information_schema  [new]
Glory
Member

Откуда:
Сообщений: 104760
dreamer2
так чего там на 2014?

На 2014 при наличие хоть какого разрешительного права хоть на один столбец в INFORMATION_SCHEMA.COLUMNS появляются все столбцы
7 апр 16, 14:25    [19027840]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2000 2008 Information_schema  [new]
dreamer2
Member

Откуда:
Сообщений: 8
Проверил на 2005, аналогично 2008 2014

вот странно, что поведение изменилось, а документацию не подтянули
впрочем придется жить как есть
8 апр 16, 12:35    [19032135]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить