Можно ли в SQL Server просматривать несколько баз данных с одним логином? - PullRequest
0 голосов
/ 10 апреля 2019

Мой первый пост с вопросом: у меня есть версия SQL Server 2017 CU14 dev, работающая на Lubuntu 18.04 LTS.

Допустим, у меня есть 3 базы данных masterdb, child1, child2 и при входе в систему sa я вижу все 3 базы данных.

Можно ли, например, создать логин mike для просмотра только child1 и child2 баз данных, а не показывать masterdb?

Я уже пробовал другие способы, но в результате только отношение 1 к 1, 1 вид входа в систему 1 дБ (не показаны другие 2 дБ)

Любое понимание будет оценено

1 Ответ

0 голосов
/ 10 апреля 2019

VIEW ANY DATABASE может быть тем, что вы после , если , то у логина есть пользователь, которому принадлежит рассматриваемая база данных. Возьмите следующий пример:

USE master;
GO

CREATE LOGIN Test WITH PASSWORD = '123', CHECK_POLICY = OFF;

ALTER SERVER ROLE dbcreator ADD MEMBER Test;

DENY VIEW ANY DATABASE TO Test;
GO

EXECUTE AS LOGIN = 'Test';
GO

SELECT *
FROM sys.databases;
GO
CREATE DATABASE TestDB;
GO

SELECT *
FROM sys.databases;

REVERT;
GO
DROP DATABASE test;
DROP LOGIN TestDB;

Обратите внимание, что в первых SELECT отображаются только tempdb и master. После второго TestDB также показывает, как пользователь Test (mapepd для входа в систему Test) владеет базой данных TestDB.

Обратите внимание, что user, являющийся частью роли db_owner, не позволяет им видеть базу данных (или любую другую роль):

USE master;
GO

CREATE LOGIN Test WITH PASSWORD = '123', CHECK_POLICY = OFF;

ALTER SERVER ROLE dbcreator ADD MEMBER Test;

DENY VIEW ANY DATABASE TO Test;
GO
CREATE DATABASE SampleDB;
GO
USE SampleDB;
GO
CREATE USER Test FOR LOGIN Test;
ALTER ROLE db_owner ADD MEMBER Test;
GO
USE master;
GO
CREATE DATABASE ExampleDB;
GO
USE ExampleDB;
GO
CREATE USER Test FOR LOGIN Test;
ALTER ROLE db_datareader ADD MEMBER Test;
GO
USE master;
EXECUTE AS LOGIN = 'Test';
GO

SELECT *
FROM sys.databases;
GO
CREATE DATABASE TestDB;
GO

SELECT *
FROM sys.databases;

REVERT;
GO
DROP DATABASE TestDB;
DROP DATABASE SampleDB;
DROP DATABASE ExampleDB;
DROP LOGIN Test;

Ни SampleDB, ни ExampleDB никогда не появляются в операторах SELECT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...