В настоящее время я использую SQL Server 2005, в котором есть несколько баз данных для отдельных клиентов.
Мне нужно создать одну учетную запись только для чтения для каждого из моих клиентов, однако я не могу разрешить им видеть другие базы данных в SSMS, поскольку они содержат названия компаний других клиентов.
Я запустил следующее, что дает мне именно то, что мне нужно, однако это дает им db_owner, а не только для чтения. При удалении db_owner они больше не видят БД в SSMS.
--Step 1: (create a new user)
create LOGIN hello WITH PASSWORD='foo', CHECK_POLICY = OFF;
-- Step 2:(deny view to any database)
USE master;
GO
DENY VIEW ANY DATABASE TO hello;
-- step 3 (then authorized the user for that specific database , you have to use the master by doing use master as below)
USE master;
GO
ALTER AUTHORIZATION ON DATABASE::yourDB TO hello;
GO
Это возможно? Я могу обновить SQL, если потребуется, если в 2005 году это было невозможно.
Сработает ли для вас создать пользователя для входа и назначить ему роль только для чтения?
<!-- language: lang-sql -->
CREATE USER hello FOR LOGIN hello
GO
EXEC sp_addrolemember 'db_datareader', 'hello'
После этого они не должны быть членами роли db_owner, если только она не установлена где-нибудь по умолчанию для добавления любых новых пользователей к роли db_owner. Это должно ограничиваться SELECT только для базы данных пользователя. Если вы хотите ограничить представления определенными таблицами, вам придется создать настраиваемую роль, чтобы ограничить этот доступ.