GRANT EXECUTE ke semua prosedur tersimpan

147

Apakah perintah berikut secara efektif memberikan izin kepada pengguna, "MyUser," untuk menjalankan SEMUA prosedur yang tersimpan dalam database?

GRANT EXECUTE TO [MyDomain\MyUser]
Chad
sumber

Jawaban:

244

SQL Server 2008 dan di atas:

/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor

Untuk hanya pengguna (bukan peran):

USE [DBName]
GO
GRANT EXECUTE TO [user]
Antony Scott
sumber
28
+1 plus: bahkan memberikan izin EXECUTE ke prosedur tersimpan di masa mendatang, mis. Yang belum ada dalam basis data Anda - tetapi akan dibuat nanti.
marc_s
2
Saya pikir perlu dicatat bahwa Anda usermungkin harus berada dalam kurung kotak. Ini benar dalam kasus penggunaan saya setidaknya sebagian karena pengguna saya memiliki domain terlampir (mis. Ia memiliki \ karakter di dalamnya). sunting: memperbaiki karakter slash unescaped
PrinceTyke
1
Mengapa tidak menetapkan pengguna ke peran db_ddladmin? "Anggota peran basis data tetap db_ddladmin dapat menjalankan perintah Data Definition Language (DDL) apa pun dalam database." - lihat di sini
Michael Tobisch
1
@MichaelTobisch di sini hanya perlu menjalankan Prosedur Tersimpan. Peran DDL harus digunakan dalam skenario Buat, Ubah, Jatuhkan, ... Tautan ini harus bermanfaat: docs.microsoft.com/en-us/sql/relational-databases/security/… dan geeksforgeeks.org/sql-ddl-dml-dcl-tcl-commands
QMaster
2
Dan tingkat selanjutnya menambahkan pengguna ke peran jika itu menyimpan langkah penelitian lain. ALTER ROLE db_executor ADD MEMBER YourUserNameHere
Piwaf
72

SQL Server 2005 memperkenalkan kemampuan untuk memberikan izin eksekusi database ke prinsip database, seperti yang telah Anda jelaskan:

GRANT EXECUTE TO [MyDomain\MyUser]

Itu akan memberikan izin pada lingkup basis data, yang secara implisit mencakup semua prosedur tersimpan di semua skema. Ini berarti Anda tidak perlu secara eksplisit memberikan izin per prosedur tersimpan.

Anda juga dapat membatasi dengan memberikan skema mengeksekusi izin jika Anda ingin lebih terperinci:

GRANT EXECUTE ON SCHEMA ::dbo TO [MyDomain\MyUser]
Robin Minto
sumber
5
Sangat bagus untuk dapat melakukan ini pada skema tertentu, jadi menghindari izin pada sys
RemarkLima
17

Selain jawaban di atas, saya ingin menambahkan:


Anda mungkin ingin memberikan ini kepada peran sebagai gantinya, dan kemudian menetapkan peran tersebut kepada pengguna. Misalkan Anda telah membuat peran myAppRightsvia

CREATE ROLE [myAppRights] 

maka Anda dapat memberikan hak eksekusi melalui

GRANT EXECUTE TO [myAppRights] 

untuk peran itu.


Atau, jika Anda ingin melakukannya di tingkat skema:

GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights]

juga berfungsi (dalam contoh ini, peran myAppRightsakan memiliki hak mengeksekusi pada semua elemen skema dbosetelahnya).

Dengan cara ini, Anda hanya perlu melakukannya sekali dan dapat menetapkan / mencabut semua hak aplikasi terkait dengan mudah ke / dari pengguna jika Anda perlu mengubahnya nanti - terutama berguna jika Anda ingin membuat profil akses yang lebih kompleks.

Catatan: Jika Anda memberikan peran pada skema, itu memengaruhi juga elemen yang akan Anda buat nanti - ini mungkin bermanfaat atau tidak tergantung pada desain yang Anda maksudkan, jadi ingatlah itu.

Mat
sumber
-5

GRANT EXECUTE TO [ROLE]

Yang ini pasti membantu

Sharon AS
sumber
Anda tidak ingin memberikan eksekusi ke peran publik, itu membuka masalah keamanan. Berikan saja kepada pengguna atau peran. Memberikan eksekusi untuk prok tertentu adalah cara terbaik untuk pergi sehingga Anda dapat mengontrol siapa yang memukul apa.
ammills01
Sarkasme di sini tidak sesuai untuk situs T&J, terutama ketika itu memberikan hasil yang mungkin berbahaya.
Christopher Brown
"Setiap login milik peran server tetap publik, dan setiap pengguna basis data milik peran basis data publik. Ketika login atau pengguna belum diberikan atau ditolak izin khusus pada keamanan, login atau pengguna mewarisi izin yang diberikan kepada publik pada yang aman "Jadi memberikan izin apa pun ke PUBLIC berarti memberikan izin tersebut kepada semua pengguna. Ini adalah kerentanan besar. Baca tautan ini untuk tambahan: docs.microsoft.com/en-us/sql/relational-databases/security/…
QMaster
Dengan jawaban seperti ini, tidak heran ada begitu banyak situs web dan database yang tidak aman. Astaga.
Dave Lucre