SQL Server 2012'de salt okunur bir sunucu rolü nasıl oluşturulur?


15

Yeni bir sunucu rolü oluştururken "Herhangi bir veritabanını görüntüle" izni veriyorum, ancak bu iznin yalnızca kullanıcının sistem veritabanlarını görüntülemesine izin verdiğini fark ettim.

Salt okunur olan ve herhangi bir veritabanını okuyabilen bir sunucu rolü oluşturmaya çalışıyorum.

Kullanıcı veritabanlarını okumak için kullanıcı tanımlı bir sunucu rolü oluşturmanın bir yolu var mı? Yoksa bunu kullanıcı başına kullanıcı eşleme yoluyla yapmak zorunda mıyım?

Yanıtlar:


16

Bunu bir yorum için çok uzun olduğu ve yakında diğer kullanıcılarla alakalı olacağı için bir yanıt olarak yayınlamak.

SQL Server 2014, tam olarak bu tür bir senaryoya yardımcı olacak bazı yeni sunucu düzeyinde izinler ekler - denetim göz önünde bulundurularak tasarlanmıştır, ancak bu tür bir gereksinim de bu faturaya uymaktadır. Sunucu düzeyinde oturum açmaya aşağıdaki iki izni ekleyebilirsiniz:

CONNECT ANY DATABASE

SELECT ALL USER SECURABLES

Birincisi, göründüğü gibi, girişin herhangi bir veritabanına bağlanmasına izin verir. Bununla ilgili güzel bir şey, gelecekte oluşturulacak veritabanları için bile buna izin vermesidir (açık reddetme ayarlamamış olmanız koşuluyla, belirli kullanıcı veritabanlarını bu izne sahip girişlerden nasıl koruyabilirsiniz). İkincisi SELECT, girişin erişime sahip oldukları herhangi bir veritabanında okuma işlemleri gerçekleştirmesine izin verir - böylece tablolardan, görünümlerden, UDF'lerden vb. Olabilirler , ancak herhangi bir UPDATEişlem gerçekleştiremezler (bu izin, saklı yordam DML gerçekleştirir). Sunucunun tamamına geniş bir açık okuma erişimi vermek veya daha hassas olmak istiyorsanız, CONNECTbelirli veritabanlarına geleneksel ayrıcalıklar tanıyabilirsiniz ve bunlar SELECT ALL USER SECURABLES,yalnızca oturum açma özelliğinin açık erişime sahip olduğu veritabanları için işlev görür.

2014 güvenlik değişiklikleri burada belgelenmiştir ; iyi, kısmen - veritabanı düzeyindeki izni unuttular ALTER ANY DATABASE EVENT SESSION- bu burada alakalı değil.


Gelecek sunucular için bu genişletilmiş yanıt için teşekkürler. Bu işlem / denetimin sunucu düzeyinde olması. DB Uyumluluk Düzeyi hakkında herhangi bir yorum var mı? DB CL 2012 ise, 2014 özelliği hala çalışır mı?
SnapJag

@SnapJag Uyumluluk düzeyinin güvenlik özellikleri üzerinde herhangi bir etkisi yoktur, çoğunlukla T-SQL'in nasıl ayrıştırıldığı ve optimize edicinin sorgu planlarını nasıl oluşturduğu ile ilgilidir.
Aaron Bertrand

@AaronBertrand Herhangi bir veritabanında da güncellemelere izin vermek için sunucu düzeyinde rollerde ayarlayabileceğimiz bir izin olup olmadığını biliyor musunuz? (sysadmin sabit rolü kesin olabilir, ancak kullanıcı tanımlı bir sunucu rolü için yapabilir miyiz?)
MaxiWheat

@MaxiWheat Hayır, bunu yapmanın önemsiz bir yolunu düşünemiyorum, üzgünüm.
Aaron Bertrand

FWIW bu Azure SQL Veritabanı için çalışmaz. [NameOfUserOrGroup] 'a HERHANGİ BİR VERİTABANI VERİN BAĞLANIN SQL Server'ın bu sürümünde desteklenmeyen güvenli sınıf' sunucu '.
Dzejms

8

Sunucu düzeyinde 'herhangi bir veritabanını oku' izni yoktur ve sunucu düzeyinde rollere veritabanı düzeyinde izin verilemez

Yani evet, kullanıcıları tek tek veritabanlarına eşlemeniz gerekecek. Active Directory kullanıyorsanız, bir windows grubu oluşturabilir, ardından bu gruba SQL Server'da bir oturum açma adı verebilir, ardından o grubun tüm veritabanlarına db_datareader uygulayabilirsiniz (yine de her veritabanında kullanıcı oluşturmanız gerekir).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.