DDL_admin vs uprawnienia db_owner

15

Przejmuję projekt polegający na usuwaniu i ograniczaniu uprawnień wszystkich użytkowników baz danych w naszej farmie serwerów. (dobre czasy)

Jednym z obecnie ograniczanych uprawnień są uprawnienia db_owner.
To uprawnienie jest sprawdzane indywidualnie dla każdego przypadku, ale częstą zmianą jest zastąpienie uprawnień db_owner następującymi:

Chciałbym zdefiniować dokładną różnicę między nimi (w celu poinformowania klientów).
Jednak, o ile mogę stwierdzić, różnica między nimi powinna wynosić:

  • uprawnienia db_accessadmin
  • uprawnienia db_backupoperator
  • uprawnienia db_securityadmin

Więc w efekcie stracą:
[ALTER ANY USER]
[CREATE SCHEMA]
[BACKUP DATABASE], [BACKUP LOG], [CHECKPOINT]
[ALTER ANY APPLICATION ROLE],[ALTER ANY ROLE]
[DROP DATABASE]

Czy jest coś jeszcze, co użytkownik straciłby, gdy db_owner zostanie zastąpiony czterema rolami powyżej?
Czy to rzeczywiście służy celowi bezpieczeństwa?

Reaces
źródło

Odpowiedzi:

16

db_ddladmin vs db_owner

Z tego, co mogę powiedzieć na podstawie tego, co przetestowałem i przeczytałem, w przeważającej części twoja lista wygląda na dokładną, z wyjątkiem tego, db_ddladminże pozwala CREATE SCHEMA. Potwierdziłem, że inne wymienione przez ciebie uprawnienia bezpieczeństwa zostały rzeczywiście odrzucone.

Odmowa tylko za pomocą DDLADMIN:

[ALTER ANY USER]

[BACKUP DATABASE], [BACKUP LOG],[CHECKPOINT]

[ALTER ANY APPLICATION ROLE], [ALTER ANY ROLE]

[DROP DATABASE]

Zauważając, że. . .

  1. db_datareaderpozwoli na SELECTdostęp do wszystkich tabel
  2. db_datarwriterpozwoli INSERT, UPDATEi DELETEdostęp do wszystkich tabel
  3. db_executorpozwoli na EXECUTEdostęp do wszystkich wykonywalnych obiektów

Dodatkowo posiadanie uprawnień roli db_ddladmin może oznaczać. . .

Uwaga: Ponieważ masz tak wiele różnych wersji SQL Server z lat 2005-2014, być może najlepiej będzie, jeśli mały zestaw użytkowników przetestuje to na początku, aby zobaczyć, kto krzyczy, aby usunąć wszelkie zagięcia itp.

  • Obiekty, które posiadają z tą rolą, nie będą własnością DBO, więc być może będziesz musiał poradzić sobie z problemami związanymi ze zmianą własności, jeśli kiedykolwiek będzie jakiś problem z czymś na tym poziomie. Nie jestem w 100% pewien, że byłby to problem, ale warto wspomnieć na wszelki wypadek.

    Źródło: Łańcuchy własności

  • Dzięki tej roli (mogą się różnić w zależności od wersji SQL Server) mogą oni dodawać zasady bezpieczeństwa SQL zdefiniowane w bieżącej bazie danych do obiektów, które wciąż posiadają, tylko nie wszystkie obiekty (te, których nie mają), ani dodawać nowego serwera -poziom zdefiniowany główny do poziomu DB.


Ponadto brak uprawnień do roli DBO może oznaczać. . .

Uwaga: Ponieważ masz tak wiele różnych wersji SQL Server z lat 2005-2014, być może najlepiej będzie, jeśli mały zestaw użytkowników przetestuje to na początku, aby zobaczyć, kto krzyczy, aby usunąć wszelkie zagięcia itp.

  • Brak roli DBO może uniemożliwić niektóre interfejsy GUI projektanta SSMS (różniąca się wersja SQL Server) bez wypełniania lub otwierania bez błędów (np. Podczas modyfikowania tabel lub kolumn za pomocą GUI), nawet jeśli robi to za pomocą T-SQL i uprawnienia są na miejscu . W niektórych wersjach SQL Server można to rozwiązać, dopuszczając, GRANT VIEW DEFINITIONgdzie jest to problem, i może to być tylko ostrzeżenie tylko w niektórych wersjach SQL Server.

    Zasoby

    • Nie jesteś zalogowany jako właściciel bazy danych lub użytkownik będący członkiem roli db_owner. Nie będziesz mógł zapisać zmian w tabelach, których nie jesteś właścicielem.

    • db_ddladmin Rola nie pozwala na korzystanie z funkcji „projektowania” w SSMS

      „Staramy się zapobiegać udostępnianiu użytkownikom / programistom dbo w ich bazach danych QA w jak największym stopniu. Jednym z problemów jest to, że nadal muszą być w stanie tworzyć i modyfikować obiekty bazy danych, takie jak tabele użytkowników. Wielu deweloperów jest nowością w MS SQL, a zatem mają tendencję do trzymania się GUI (SSMS) do tego rodzaju pracy. Problem pojawia się, gdy przyznamy im db_ddladmin (nie dbo) i nie są już w stanie modyfikować tabel ani kolumn za pomocą GUI projektanta tabel. muszą poświęcić dodatkowy czas na naukę poleceń TSQL i ich składni (których nigdy więcej nie będą potrzebować) lub zaangażować zespół DBA, który zabiera trochę czasu innym naszym działaniom.

      Nie wiem, czy jest to błąd, czy żądanie funkcji, ale uważam to za błąd, ponieważ użytkownik ma wystarczające uprawnienia do zmiany tabeli za pomocą TSQL, ale GUI daje im komunikaty z następującymi informacjami:

      Nie jesteś zalogowany jako właściciel bazy danych lub administrator systemu. Zapisywanie zmian w tabelach, których nie jesteś właścicielem, może być niemożliwe.” ORAZ „Tabela [schema].[table]jest ustawiona tylko do odczytu, użytkownik nie ma wystarczających uprawnień do tej tabeli ”.

      Śledzenie zdaje się wskazywać, że sprawdzeniem jest is_member („właściciel_bazy_db”), co wyklucza członków db_ddladmin, mimo że w rzeczywistości mają uprawnienia do modyfikowania obiektu. Microsoft SQL Server Management Studio ”


      Wysłany przez agenta DBA w dniu 25.01.2010 o 07:06

      Miałem podobny problem i udało mi się go rozwiązać, wykonując następujący grant

      GRANT view definition on schema:: <schemaname> to <username>

Inne uwagi

Ponieważ stwierdzasz, że jest to sprawdzane indywidualnie dla każdego przypadku

Jednym z obecnie ograniczanych uprawnień są uprawnienia db_owner.

To uprawnienie jest sprawdzane indywidualnie dla każdego przypadku, ale częstą zmianą jest zastąpienie uprawnień db_owner następującymi:

  • db_datareader
  • db_datawriter
  • db_ddladmin
  • db_executor

Czy zastanawiałeś się nad utworzeniem dodatkowych niestandardowych ról dla większego dostępu na poziomie bazy danych „wszystkich obiektów”, których potrzebuje każda osoba, zamiast przyznania im db_ddladminroli, ponieważ prawdopodobnie zapewni im to więcej, niż faktycznie potrzebuje obiektów na poziomie bazy danych.

Zazwyczaj daję to, co jest potrzebne i nic więcej, aby mogli wykonać swoją pracę, a jeśli istnieje „zwykła” lub „standardowa” potrzeba dostępu do obiektów na poziomie bazy danych do wszystkich obiektów w bazie danych, tworzę niestandardową rolę bazy danych, taką jak db_executorale zobacz mój poniższy przykład. W ten sposób możesz przyznać ludziom to, czego naprawdę potrzebują, do WSZYSTKIEGO obiektu DB w konkretnej bazie danych, jeśli poziom ochrony nie jest jawny w swoich bazach danych.

----Custom Database Roles

/* CREATE A NEW ROLE  -- Execute to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_Execute
GRANT EXECUTE TO db_All_StoredProc_Execute

/* CREATE A NEW ROLE  -- Alter to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_Alter
GRANT ALTER ANY SCHEMA TO db_All_StoredProc_Alter

/* CREATE A NEW ROLE  -- View Definition to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_View
GRANT VIEW DEFINITION TO db_All_StoredProc_View

/* CREATE A NEW ROLE - Any schema alter and create procedure permissions */
-- Database specific
CREATE ROLE db_All_CreateProc_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateProc_AlterSchema
GRANT CREATE PROCEDURE TO db_All_CreateProc_AlterSchema
GO

/* CREATE A NEW ROLE - Any schema alter and create table permissions */
-- Database specific
CREATE ROLE db_All_CreateTable_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateTable_AlterSchema
GRANT CREATE TABLE TO db_All_CreateTable_AlterSchema

/* CREATE A NEW ROLE - Any schema alter and create function permissions */
-- Database specific
CREATE ROLE db_All_CreateFunction_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateFunction_AlterSchema
GRANT CREATE FUNCTION TO db_All_CreateFunction_AlterSchema

/* CREATE A NEW ROLE - Any schema alter and create aggregate permissions */
-- Database specific
CREATE ROLE db_All_CreateAggregate_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateAggregate_AlterSchema
GRANT CREATE AGGREGATE TO db_All_CreateAggregate_AlterSchema

/* CREATE A NEW ROLE - Any schema alter and create view permissions */
-- Database specific
CREATE ROLE db_All_CreateView_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateView_AlterSchema
GRANT CREATE VIEW TO db_All_CreateView_AlterSchema

/* CREATE A NEW ROLE - Any schema alter and create schema permissions */
-- Database specific
CREATE ROLE db_All_CreateSchema_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateSchema_AlterSchema
GRANT CREATE SCHEMA TO db_All_CreateSchema_AlterSchema

Chciałem również udostępnić rolę db_DDLAdmin_Restriction, którą możesz rozważyć, aby rozważyć utworzenie inaczej z jawnym DENYograniczeniem tego, co db_ddladmindaje dostęp, abyś mógł przynajmniej utworzyć to w bazach danych, gdzie przyznajesz im tę rolę i ustawić jawne DENYdla rzeczywistych typów obiektów itp., do których nie chcesz mieć dostępu.

Na przykład, jeśli wiesz, że na pewno będzie tworzenie procedur składowanych i funkcji można wykluczyć DENY CREATE FUNCTION, DENY CREATE PROCEDURE, DENY ALTER ANY SCHEMA.

---Create ddladmin restriction custom DB role
DENY ALTER ANY ASSEMBLY                    TO db_DDLAdmin_Restriction
DENY ALTER ANY ASYMMETRIC KEY              TO db_DDLAdmin_Restriction
DENY ALTER ANY CERTIFICATE                 TO db_DDLAdmin_Restriction
DENY ALTER ANY CONTRACT                    TO db_DDLAdmin_Restriction
DENY ALTER ANY DATABASE DDL TRIGGER        TO db_DDLAdmin_Restriction
DENY ALTER ANY DATABASE EVENT NOTIFICATION TO db_DDLAdmin_Restriction
DENY ALTER ANY DATASPACE                   TO db_DDLAdmin_Restriction
DENY ALTER ANY FULLTEXT CATALOG            TO db_DDLAdmin_Restriction
DENY ALTER ANY MESSAGE TYPE                TO db_DDLAdmin_Restriction
DENY ALTER ANY REMOTE SERVICE BINDING      TO db_DDLAdmin_Restriction
DENY ALTER ANY ROUTE                       TO db_DDLAdmin_Restriction
DENY ALTER ANY SCHEMA                      TO db_DDLAdmin_Restriction
DENY ALTER ANY SERVICE                     TO db_DDLAdmin_Restriction
DENY ALTER ANY SYMMETRIC KEY               TO db_DDLAdmin_Restriction
DENY CHECKPOINT                            TO db_DDLAdmin_Restriction
DENY CREATE AGGREGATE                      TO db_DDLAdmin_Restriction
DENY CREATE DEFAULT                        TO db_DDLAdmin_Restriction
DENY CREATE FUNCTION                       TO db_DDLAdmin_Restriction
DENY CREATE PROCEDURE                      TO db_DDLAdmin_Restriction
DENY CREATE QUEUE                          TO db_DDLAdmin_Restriction
DENY CREATE RULE                           TO db_DDLAdmin_Restriction
DENY CREATE SYNONYM                        TO db_DDLAdmin_Restriction
DENY CREATE TABLE                          TO db_DDLAdmin_Restriction
DENY CREATE TYPE                           TO db_DDLAdmin_Restriction
DENY CREATE VIEW                           TO db_DDLAdmin_Restriction
DENY CREATE XML SCHEMA COLLECTION          TO db_DDLAdmin_Restriction
DENY REFERENCES                            TO db_DDLAdmin_Restriction
GO
Pimp Juice IT
źródło
8

Korzystając ze skryptu SQL, aby wyświetlić listę wszystkich uprawnień, poszedłem i stworzyłem użytkowników dla każdej sprawy.

EXECUTE AS USER = 'test_user'
SELECT 
    permission_name 
FROM fn_my_permissions(null, 'DATABASE')
ORDER BY subentity_name, permission_name
REVERT;

Następnie porównałem wyniki i znalazłem się na poniższej liście, z dokumentacją przede wszystkim z msdn (wszelkie cytaty, które nie zostały specjalnie przywołane, pochodzą z łącza msdn).
Poniżej znajduje się dokumentacja, której użyłem, aby poinformować osoby, które utraciły uprawnienia dbo, co dokładnie utraciły.

ZMIENIAĆ

Daje możliwość zmiany właściwości, z wyjątkiem własności, określonego zabezpieczenia. Przyznany zakresowi, ALTER daje również możliwość zmiany, utworzenia lub usunięcia dowolnego elementu zabezpieczającego zawartego w tym zakresie. Na przykład uprawnienie ALTER do schematu obejmuje możliwość tworzenia, modyfikowania i upuszczania obiektów ze schematu.

ZMIENIĆ KAŻDĄ ROLĘ APLIKACJI ZMIENIĆ
KAŻDĄ KONTROLĘ BAZY DANYCH ZMIENIĆ
KAŻDĄ ROLĘ
ZMIENIĆ DOWOLNEGO UŻYTKOWNIKA

Daje możliwość TWORZENIA, ZMIANY lub KROKU pojedynczych instancji Bazy Danych Zabezpieczanych. Na przykład ALTER ANY SCHEMA daje możliwość tworzenia, modyfikowania lub upuszczania dowolnego schematu w bazie danych.

Role aplikacji to podmioty bazy danych, które umożliwiają uruchamianie aplikacji z własnymi, podobnymi do użytkownika uprawnieniami.

Inspekcja wystąpienia programu SQL Server lub bazy danych SQL Server obejmuje śledzenie i rejestrowanie zdarzeń występujących w systemie. Obiekt specyfikacji kontroli na poziomie bazy danych należy do kontroli. Możesz utworzyć jedną specyfikację kontroli bazy danych dla bazy danych SQL Server na audyt.

Role baz danych służą do łatwego zarządzania uprawnieniami w bazach danych, SQL Server zapewnia kilka ról, które są podmiotami zabezpieczeń grupującymi inne podmioty. Są jak grupy w systemie operacyjnym Microsoft Windows. Role na poziomie bazy danych obejmują zakres uprawnień w całej bazie danych.

AUTHENTICATE
Znaleziono w msdn.

Uprawnienia AUTHENTICATE & AUTHENTICATE SERVER są używane tylko podczas korzystania z EXECUTE AS w scenariuszach między bazami danych i dostępem do serwera (odpowiednio).

KOPIA ZAPASOWA BAZ DANYCH

POŁĄCZ REPLIKACJĘ

Służy do uprawnień do replikacji bazy danych .

KONTROLA

Zapewnia stypendystowi funkcje podobne do własności. Beneficjent skutecznie posiada wszystkie zdefiniowane uprawnienia do zabezpieczenia. Zleceniodawca, któremu przyznano KONTROLĘ, może również udzielać uprawnień do zabezpieczenia.

UTWÓRZ ROLĘ

Zapewnia stypendystowi możliwość utworzenia Bazy danych Zabezpieczanej.

SHOWPLAN

Uprawnienia Showplan są używane dla różnych opcji instrukcji Showplan SET, gdy są używane z partiami języka Transact-SQL .

SUBSKRYBUJ ZGŁOSZENIA ZAPYTANIA

Dokumentacja dotycząca powiadomień o zapytaniach.

Powiadomienia o zapytaniach, oparte na infrastrukturze Service Broker, umożliwiają powiadamianie aplikacji o zmianie danych. Ta funkcja jest szczególnie przydatna w przypadku aplikacji, które udostępniają pamięć podręczną informacji z bazy danych, takich jak aplikacja internetowa, i wymagają powiadomienia o zmianie danych źródłowych.

PRZEJĄĆ NA WŁASNOŚĆ

Umożliwia beneficjentowi przejęcie na własność papierów wartościowych, na które zostało udzielone.

ZOBACZ STAN BAZY DANYCH

Służy do wyświetlania widoków i funkcji zarządzania dynamicznego (Transact-SQL) .

ZOBACZ DEFINICJĘ

Dokumentacja dotycząca uprawnień do definicji widoku.

Uprawnienie VIEW DEFINITION pozwala użytkownikowi zobaczyć metadane obiektu zabezpieczanego, na którym udzielono uprawnienia. Jednak uprawnienie VIEW DEFINITION nie przyznaje dostępu do samego zabezpieczenia. Na przykład użytkownik, któremu przyznano tylko uprawnienie VIEW DEFINITION w tabeli, może wyświetlić metadane związane z tabelą w widoku katalogu sys.objects. Jednak bez dodatkowych uprawnień, takich jak SELECT lub CONTROL, użytkownik nie może odczytać danych z tabeli.

Reaces
źródło