On-Premise SQL
On-Premise SQL
Requirements
3
Step 3: Create a read-only user and grant permissions
CREATE USER 'teleskope_ro'@'%' IDENTIFIED BY '****PASSWORD****';CREATE USER teleskope_ro WITH PASSWORD '****PASSWORD****';CREATE LOGIN teleskope_ro WITH PASSWORD = '****PASSWORD****';CREATE LOGIN [DOMAIN\svc_teleskope_sql] FROM WINDOWS;GRANT SHOW DATABASES, SELECT ON *.* TO 'teleskope_ro'@'%';
FLUSH PRIVILEGES;GRANT pg_read_all_data TO teleskope_ro;SELECT format('GRANT CONNECT ON DATABASE %I TO teleskope_ro;', datname)
FROM pg_database
WHERE datname NOT IN ('template0', 'template1', 'postgres')
\gexec
SELECT format('GRANT USAGE ON SCHEMA %I TO teleskope_ro;', nspname)
FROM pg_namespace
WHERE nspname NOT IN ('pg_toast', 'pg_catalog', 'information_schema')
\gexec
SELECT format('GRANT SELECT ON ALL TABLES IN SCHEMA %I TO teleskope_ro;', nspname)
FROM pg_namespace
WHERE nspname NOT IN ('pg_toast', 'pg_catalog', 'information_schema')
\gexec-- Allow the login to discover databases
GRANT VIEW ANY DATABASE TO teleskope_ro;
-- Grant read access across databases
DECLARE @sql NVARCHAR(MAX);
SET @sql = '';
SELECT @sql +=
'USE [' + name + '];
IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = ''teleskope_ro'')
CREATE USER teleskope_ro FOR LOGIN teleskope_ro;
ALTER ROLE [db_datareader] ADD MEMBER [teleskope_ro];' + CHAR(13)
FROM sys.databases
WHERE state = 0 AND name NOT IN ('tempdb', 'model', 'msdb');
EXEC sp_executesql @sql;Last updated
Was this helpful?
