DDL_admin vs izin db_owner


15

Saya mengambil alih proyek yang melibatkan penghapusan dan pembatasan izin semua pengguna basis data di seluruh server kami. (waktu yang menyenangkan)

Salah satu izin yang saat ini dibatasi adalah izin db_owner.
Izin ini sedang ditinjau berdasarkan kasus per kasus, tetapi perubahan umum adalah untuk mengganti izin db_owner dengan yang berikut:

Saya ingin mendefinisikan perbedaan yang tepat antara keduanya (untuk memberi tahu klien).
Namun, sejauh yang saya tahu, perbedaan antara keduanya adalah:

  • izin db_accessadmin
  • izin db_backupoperator
  • izin db_securityadmin

Jadi pada dasarnya mereka akan kehilangan:
[ALTER ANY USER]
[CREATE SCHEMA]
[BACKUP DATABASE], [BACKUP LOG], [CHECKPOINT]
[ALTER ANY APPLICATION ROLE],[ALTER ANY ROLE]
[DROP DATABASE]

Apakah ada hal lain yang akan longgar pengguna setelah db_owner digantikan oleh empat peran di atas?
Apakah ini benar-benar bermanfaat untuk keamanan?

Jawaban:


16

db_ddladmin vs db_owner

Dari apa yang saya tahu dari apa yang saya uji dan baca terus, sebagian besar daftar Anda terlihat akurat kecuali db_ddladminTIDAK mengizinkan Anda CREATE SCHEMA. Saya memang mengkonfirmasi bahwa izin keamanan lain yang Anda daftarkan memang ditolak.

Ditolak hanya dengan DDLADMIN:

[ALTER ANY USER]

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

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

[DROP DATABASE]

Memperhatikan bahwa. . .

  1. db_datareaderakan memungkinkan SELECTakses ke semua tabel
  2. db_datarwriterakan memungkinkan INSERT,UPDATE dan DELETEakses ke semua tabel
  3. db_executorakan memungkinkan EXECUTEakses ke semua objek yang dapat dieksekusi

Selain itu, memiliki izin peran db_ddladmin mungkin berarti. . .

Catatan: Karena Anda memiliki begitu banyak versi SQL Server yang berbeda dari 2005 - 2014, mungkin yang terbaik untuk memiliki sekelompok kecil pengguna menguji ini awalnya untuk melihat siapa yang berteriak untuk menghilangkan ketegaran, dll.

  • Objek yang mereka miliki dengan peran ini tidak akan dimiliki oleh DBO sehingga Anda mungkin harus berurusan dengan masalah chaning kepemilikan jika ada masalah dengan sesuatu di level ini. Saya tidak 100% yakin bahwa ini akan menjadi masalah tetapi perlu disebutkan untuk berjaga-jaga.

    Sumber: Rantai Kepemilikan

  • Dengan peran ini (dapat bervariasi tergantung pada versi SQL Server) mereka mungkin dapat menambahkan prinsip keamanan SQL yang didefinisikan dalam DB saat ini ke objek yang mereka miliki, hanya saja tidak semua objek (yang tidak mereka miliki) atau menambah server baru -tingkat utama yang ditetapkan ke tingkat DB.


Selain itu, tidak memiliki izin peran DBO dapat berarti. . .

Catatan: Karena Anda memiliki begitu banyak versi SQL Server yang berbeda dari 2005 - 2014, mungkin yang terbaik untuk memiliki sekelompok kecil pengguna menguji ini awalnya untuk melihat siapa yang berteriak untuk menghilangkan ketegaran, dll.

  • Tidak memiliki peran DBO dapat mencegah antarmuka GUI desainer SSMS (versi SQL Server bervariasi) dari mengisi atau membuka tanpa kesalahan (misalnya ketika memodifikasi tabel atau kolom melalui GUI) meskipun melakukannya melalui karya T-SQL dan izin berada di tempat . Dalam beberapa versi SQL Server ini dapat diatasi dengan memungkinkan di GRANT VIEW DEFINITIONmana ini merupakan masalah dan itu juga bisa menjadi peringatan hanya pada versi SQL Server tertentu.

    Sumber daya

    • Anda tidak masuk sebagai pemilik basis data atau sebagai pengguna yang merupakan anggota dari peran db_owner. Anda tidak akan dapat menyimpan perubahan ke tabel yang bukan milik Anda.

    • db_ddladmin Peran tidak mengizinkan penggunaan fungsi "desain" di SSMS

      "Kami mencoba untuk mencegah memberikan pengguna / pengembang dbo dalam database QA mereka sebanyak yang kami bisa. Salah satu masalah dengan ini adalah bahwa mereka masih harus dapat membuat dan memodifikasi objek database seperti tabel pengguna. Banyak pengembang baru yang dapat MS SQL dan karenanya cenderung untuk tetap menggunakan GUI (SSMS) untuk jenis pekerjaan ini. Masalah muncul ketika kami memberi mereka db_ddladmin (bukan dbo) dan mereka tidak lagi dapat memodifikasi tabel atau kolom melalui desainer tabel GUI. mereka harus meluangkan waktu tambahan untuk mempelajari perintah TSQL dan sintaksisnya (yang mungkin tidak mereka perlukan lagi) atau melibatkan tim DBA yang membutuhkan waktu dari kegiatan kami yang lain.

      Saya tidak tahu apakah ini bug atau permintaan fitur tapi saya menganggapnya bug karena pengguna memiliki izin yang cukup untuk mengubah tabel melalui TSQL tetapi GUI memberi mereka pesan yang menyatakan:

      " Anda tidak masuk sebagai pemilik basis data atau administrator sistem. Anda mungkin tidak dapat menyimpan perubahan ke tabel yang bukan milik Anda." DAN "Tabel [schema].[table]diatur untuk hanya membaca, pengguna tidak memiliki hak yang cukup pada tabel ini. "

      Jejak tampaknya menunjuk ke cek menjadi is_member ('db_owner') yang akan menghalangi anggota db_ddladmin meskipun mereka sebenarnya memiliki izin untuk memodifikasi objek. Studio Manajemen Microsoft SQL Server "


      Diposting oleh Agent DBA pada 1/25/2010 pada 7:06 AM

      Saya memiliki masalah serupa dan berhasil menyelesaikannya dengan melakukan hibah berikut

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

Pertimbangan Lainnya

Karena Anda menyatakan bahwa ini sedang ditinjau berdasarkan kasus per kasus

Salah satu izin yang saat ini dibatasi adalah izin db_owner.

Izin ini sedang ditinjau berdasarkan kasus per kasus, tetapi perubahan umum adalah untuk mengganti izin db_owner dengan yang berikut:

  • db_datareader
  • db_datawriter
  • db_ddladmin
  • db_executor

Sudahkah Anda mempertimbangkan untuk membuat peran kustom tambahan untuk lebih banyak "semua objek" akses tingkat DB yang dibutuhkan setiap orang alih-alih memberi mereka db_ddladminperan karena itu mungkin akan memberi mereka lebih banyak daripada yang sebenarnya dibutuhkan untuk objek tingkat DB juga.

Saya biasanya memberikan apa yang dibutuhkan persis dan tidak ada lagi bagi mereka untuk melakukan pekerjaan mereka dan jika ada kebutuhan "biasa" atau "standar" untuk akses objek tingkat DB ke semua objek dalam DB, saya membuat semacam peran DB kustom seperti yang db_executortapi lihat contoh saya di bawah ini. Dengan cara ini Anda dapat memberi orang-orang apa yang mereka butuhkan untuk SEMUA objek DB dalam DB tertentu jika Anda tidak mendapatkan tingkat objek eksplisit dalam DB Anda untuk keamanan mereka.

----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

Saya juga ingin berbagi peran db_DDLAdmin_Restriction yang mungkin ingin Anda pertimbangkan untuk membuat sebaliknya dengan eksplisit DENYuntuk membatasi apa yang db_ddladminmemberi akses sehingga Anda setidaknya bisa membuat ini pada DBs di mana Anda memberi mereka peran ini dan mengatur eksplisit DENYuntuk jenis objek aktual , dll. Anda tidak ingin mereka memiliki akses.

Misalnya, jika Anda tahu mereka akan pasti akan menciptakan disimpan prosedur dan fungsi, Anda dapat mengecualikan 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

8

Menggunakan SQL Script untuk mendaftar semua izin, saya pergi dan membuat pengguna untuk setiap kasus.

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

Saya kemudian membandingkan hasilnya, dan datang ke daftar berikut, dengan dokumentasi dari terutama msdn (setiap kutipan yang tidak secara khusus dirujuk berasal dari tautan msdn).
Di bawah ini adalah beberapa dokumentasi yang saya gunakan untuk memberi tahu orang-orang yang akan kehilangan izin dbo, apa sebenarnya kehilangan mereka.

MENGUBAH

Menganugerahkan kemampuan untuk mengubah properti, kecuali kepemilikan, dari keamanan tertentu. Ketika diberikan pada suatu ruang lingkup, ALTER juga memberikan kemampuan untuk mengubah, membuat, atau menjatuhkan segala sesuatu yang aman yang terkandung dalam ruang lingkup itu. Misalnya, izin ALTER pada skema mencakup kemampuan untuk membuat, mengubah, dan menjatuhkan objek dari skema.

MENGUBAH PERAN APLIKASI APA PUN
MENGUBAH AUDIT DATABASE,
MENGUBAH PERAN
APA PUN PENGGUNA

Menganugerahkan kemampuan untuk MENCIPTAKAN, mengubah, atau MENGURANGI instance individual dari Database Securable. Misalnya, ALTER ANY SKEMA memberi Anda kemampuan untuk membuat, mengubah, atau menjatuhkan skema apa pun dalam database.

Peran aplikasi adalah prinsip basis data yang memungkinkan aplikasi dijalankan dengan izinnya sendiri, seperti pengguna.

Mengaudit instance dari SQL Server atau database SQL Server melibatkan pelacakan dan pencatatan peristiwa yang terjadi pada sistem. Objek Spesifikasi Audit Level Database milik audit. Anda dapat membuat satu spesifikasi audit database per database SQL Server per audit.

Peran Database digunakan untuk dengan mudah mengelola izin di database Anda, SQL Server menyediakan beberapa peran yang merupakan prinsip keamanan yang mengelompokkan prinsipal lainnya. Mereka seperti grup di sistem operasi Microsoft Windows. Peran tingkat basis data adalah seluruh basis data dalam cakupan izinnya.

OTENTIK
Ditemukan di msdn.

Izin SERVER AUTHENTICATE & AUTHENTICATE hanya digunakan ketika menggunakan EXECUTE AS dalam skenario lintas database dan akses-server (masing-masing).

CADANGAN DATABASE
CADANGAN

MENGHUBUNGKAN REPLIKASI

Digunakan untuk izin replikasi basis data .

KONTROL

Memberi kemampuan seperti kepemilikan pada penerima. Penerima hibah secara efektif memiliki semua izin yang ditetapkan pada yang dapat dijamin. Prinsipal yang telah diberikan CONTROL juga dapat memberikan izin pada yang dapat diamankan.

BUAT PERAN

Memberi kemampuan penerima untuk membuat Basis Data Terjamin.

SHOWPLAN

Izin Showplan digunakan untuk berbagai opsi pernyataan SET Showplan ketika mereka digunakan dengan batch Transact-SQL .

BERLANGGANAN QUERY NOTIFIKASI

Dokumentasi tentang pemberitahuan permintaan.

Dibangun di atas infrastruktur Broker Layanan, notifikasi permintaan memungkinkan aplikasi diberi tahu ketika data telah berubah. Fitur ini sangat berguna untuk aplikasi yang menyediakan cache informasi dari database, seperti aplikasi Web, dan perlu diberitahukan ketika sumber data diubah.

MENGAMBIL KEPEMILIKAN

Memungkinkan penerima untuk mengambil kepemilikan atas yang dapat dijamin yang diberikannya.

LIHAT NEGARA DATABASE

Digunakan untuk melihat Tampilan dan Fungsi Manajemen Dinamis (Transact-SQL) .

LIHAT DEFINISI

Dokumentasi tentang izin definisi tampilan.

Izin LIHAT DEFINISI memungkinkan pengguna melihat metadata yang dapat dijamin di mana izin diberikan. Namun, VIEW DEFINISI izin tidak memberikan akses ke aman itu sendiri. Misalnya, pengguna yang hanya diberikan izin. Lihat izin DEFINISI di atas meja dapat melihat metadata terkait dengan tabel di tampilan katalog sys.objects. Namun, tanpa izin tambahan seperti SELECT atau CONTROL, pengguna tidak dapat membaca data dari tabel.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.