Saya memiliki pertanyaan tentang Jenis Tabel yang Ditentukan Pengguna di SQL Server 2008.
Untuk kebutuhan salah satu aplikasi ASP.NET, kami menetapkan jenis tabel kami sendiri di SQL Server 2008 untuk menggunakannya sebagai parameter dalam prosedur tersimpan (saat menjalankan perintah sql di aplikasi ASP.NET, kami meneruskan objek DataTable sebagai parameter untuk prosedur tersimpan lihat di sini untuk contoh )
Masalahnya adalah ketika kita menjalankan perintah Sql (menjalankan prosedur yang tersimpan) dari ASP.NET kita mendapatkan kesalahan:
Izin EXECUTE ditolak pada objek 'ourTableType', database 'ourDatabase', skema 'ourSchema'.
Mengapa demikian? Mengapa kita perlu mengatur izin pada tipe tabel yang ditentukan pengguna? Mengapa tidak cukup hanya mengatur izin pada prosedur tersimpan yang menggunakannya? Dan jika kita harus mengaturnya tidak peduli apa, mengapa tidak ada EXECUTE
jenis izin untuk set di jendela properti apapun (saya hanya dapat melihat Control
, References
, Take Ownership
, View Definition
)?
Yang juga tidak saya mengerti adalah bahwa mengatur izin ke Control
dalam jendela properti memecahkan masalah dan prosedur tersimpan berjalan tanpa masalah.
AS dbo
di bagian akhir. Seperti ini:GRANT EXEC ON TYPE::[schema].[typename] TO [User] AS dbo
. Bekerja untuk saya.Jawaban:
Saya sangat berharap Anda telah menyelesaikan ini sekarang, mengingat pertanyaannya sudah hampir 4 bulan, tetapi jika Anda belum melakukannya, inilah yang menurut saya adalah jawabannya.
GRANT EXEC ON TYPE::[schema].[typename] TO [User] GO
sumber
Jika prosedur tersimpan Anda menggunakan sql dinamis, yang berarti
@sql
dihasilkan dan kemudian dieksekusi melaluiexec @sql
, Anda memerlukan izin yang diberikan pada tabel yang mendasarinya.Salah satu solusinya adalah mengubah prosedur tersimpan untuk dijalankan sebagai pengguna yang berbeda . Jika Anda membuatnya berjalan sebagai SELF, itu akan dijalankan di bawah pembuat proc yang disimpan, yang sangat berbahaya. Namun, jika Anda tidak memiliki pilihan lain:
CREATE PROCEDURE dbo.usp_Demo WITH EXECUTE AS SELF
sumber
INSERT INTO
pernyataan tabel umum dan 'UPDATE' dimana pengguna ini memiliki semua izin yang dia butuhkan. Juga pengguna / login ini secara khusus dicadangkan / dibuat untuk aplikasi ASP.NET ini agar dapat terhubung ke database ini dan hanya menjalankan prosedur yang tersimpan (tidak membuat dll, pembuat selalu'sa'
).