Saya memiliki akun SQL dengan izin berikut pada database:
The db_executor
Peran Anda melihat akun ini menjadi anggota diciptakan oleh script ini:
CREATE ROLE [db_executor] AUTHORIZATION [dbo]
GO
GRANT EXECUTE TO [db_executor]
GO
Ketika saya menjalankan select
, update
, insert
atau delete
di atas meja, itu bekerja dengan baik. Ketika saya mencoba ke truncate
tabel, itu memberi saya pesan kesalahan ini:
Tidak dapat menemukan objek "TableName" karena tidak ada atau Anda tidak memiliki izin.
Izin apa yang hilang dari akun ini?
sql-server
sql-server-2012
permissions
Mansfield
sumber
sumber
TRUNCATE TABLE
adalah DDL, bukan DML.Jawaban:
Tempat terbaik untuk mencari informasi ini ada di buku online. Artikel di
TRUNCATE TABLE
sini menunjukkan:Jadi ALTER adalah izin minimum yang diperlukan. Anda bisa mendapatkannya sebagai Pemilik DB, Anda bisa mendapatkannya sebagai DB_DDLAdmin. Atau berikan saja alter.
Jika Anda berpikir tentang apa yang dipotong dan bagaimana cara kerjanya, ini masuk akal, itu adalah perintah yang cukup "parah" dan mengosongkan tabel data dan melakukannya dengan cepat.
sumber
Sesuai referensi ini di BOL :
sumber
Anda bisa membuat prosedur tersimpan dengan menjalankan sebagai pemilik hanya satu tabel atau prosedur tersimpan ke tabel apa pun. Dalam kode selanjutnya disimpan prosedur untuk memotong tabel apa pun tanpa izin
db_owner
atau dari yang lain:sumber
Anda bisa membuat prosedur tersimpan dengan menjalankan sebagai pemilik hanya satu tabel atau prosedur tersimpan ke tabel apa pun. Dalam kode selanjutnya disimpan prosedur untuk memotong tabel apa pun tanpa izin db_owner atau lainnya. Dalam versi SP ini termasuk penanganan kesalahan dan pencegahan SQL Injection
sumber
Sejauh yang saya mengerti, Truncate bukanlah sesuatu yang dapat Anda kembalikan. Jadi Transaksi Begin / Transit Komit tidak perlu.
sumber
BEGIN TRANSACTION RADHE SELECT @@TRANCOUNT select * from [dbo].[mytable] truncate table [dbo].[mytable] rollback select * from [dbo].[mytable] /*COMMIT TRAN RADHE*/ SELECT @@TRANCOUNT