Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Msg 4834 Bạn không có quyền sử dụng câu lệnh tải hàng loạt

Như tôi đã nói trong nhận xét, quyền cấp máy chủ bị tước bỏ ngay khi bạn sử dụng tính năng mạo danh.

Có 2 cách để giải quyết vấn đề này:

Cách xấu và nhanh chóng:

Đặt cơ sở dữ liệu của bạn đáng tin cậy thành BẬT. Nó sẽ hoàn thành công việc. Nhưng nếu bạn không hoàn toàn hiểu điều này có tác dụng gì, thì lời khuyên của tôi là KHÔNG nên làm điều này.

tuy nhiên, đây là mã:

ALTER DATABASE [YourDatabase] SET TRUSTWORTHY ON;

Cách tốt nhưng chậm hơn

Điều này chính xác hơn nhiều và không có bất kỳ tác dụng phụ bảo mật khó chịu nào.

Những gì bạn làm là bạn ký thủ tục đã lưu trữ của mình với một chứng chỉ. Bạn tạo người dùng từ chứng chỉ đó trong databasse. Bạn cấp cho người dùng đó các quyền thích hợp trên bảng của bạn trong cơ sở dữ liệu. Bạn cũng tạo Đăng nhập từ cùng một chứng chỉ và cấp cho đăng nhập đó các quyền hàng loạt.

Bởi vì bạn ký proc được lưu trữ bằng chứng chỉ đó, mỗi khi sp được thực thi, nó sẽ được thực thi trong ngữ cảnh của người dùng đó và đăng nhập được tạo từ chứng chỉ đó.

các bước là:

  1. Tạo chứng chỉ ở chế độ chính

  2. tạo thông tin đăng nhập từ chứng chỉ đó

  3. Cấp quyền quản trị hàng loạt cho thông tin đăng nhập đó

Bây giờ bạn cần chính xác cùng một chứng chỉ trong cơ sở dữ liệu người dùng của mình, vì vậy chúng tôi có một số bước bổ sung để thực hiện

  1. Xuất chứng chỉ ra đĩa

  2. Nhập chứng chỉ vào cơ sở dữ liệu người dùng của bạn

bây giờ chúng ta có thể hoàn thiện

  1. tạo người dùng từ chứng chỉ
  2. cấp quyền trên bàn cho người dùng đó
  3. xóa mệnh đề thực thi dưới dạng khỏi quy trình đã lưu trữ của bạn
  4. Ký vào quy trình đã lưu trữ của bạn bằng chứng chỉ của bạn

đây là mã:

USE master
go
CREATE CERTIFICATE BulkInsertCert
   ENCRYPTION BY PASSWORD = 'NicePassword!0'
   WITH SUBJECT = 'Gives Bulk Insert Privilegde'
go

CREATE LOGIN BulkInsert_CertLogin FROM CERTIFICATE BulkInsertCert
go


GRANT ADMINISTER BULK OPERATIONS TO BulkInsert_CertLogin
go


BACKUP CERTIFICATE BulkInsertCert TO FILE = '[your directory]\BulkInsertCert.cer'
WITH PRIVATE KEY (FILE = '[your directory]\BulkInsertCert.pvk' ,
                  ENCRYPTION BY PASSWORD = 'EvenNicerPassword!0',
                  DECRYPTION BY PASSWORD = 'NicePassword!0')
go

USE [YourDatabase]
CREATE CERTIFICATE BulkInsertCert FROM FILE = '[your directory]\BulkInsertCert.cer'
WITH PRIVATE KEY (FILE = '[your directory]\BulkInsertCert.pvk',
                  DECRYPTION BY PASSWORD = 'EvenNicerPassword!0',
                  ENCRYPTION BY PASSWORD = 'TheVeryBestPasswordThereIs!0')
go
--NOW DELETE THE CERTIFICATES FROM DISK

CREATE USER BulkInsert_CertUser FOR CERTIFICATE BulkInsertCert
go
GRANT ALTER, INSERT ON [YourTable] TO BulkInsert_CertUser
go


ALTER PROCEDURE usp_myproc
AS
EXEC('INSERT INTO ' + @tablename + '
            SELECT col1, col2, col3
            FROM OPENROWSET( 
              BULK '''+ @filepath +''',
              FORMATFILE='''+ @formatfile +''',
              FIRSTROW=2
            )as t'
          )
-- Sign the test procedure each time you have changed it.
ADD SIGNATURE TO usp_myproc BY CERTIFICATE BulkInsertCert
    WITH PASSWORD = 'TheVeryBestPasswordThereIs!0'
go

Lưu ý cuối cùng:

Vui lòng thay thế thư mục của Bạn bằng một đường dẫn mà bạn chắc chắn rằng tài khoản dịch vụ sql có quyền ghi!

Đảm bảo bạn xóa các chứng chỉ đã xuất đó sau khi thiết lập xong ..



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách chỉ định đối chiếu trong truy vấn trong SQL Server (T-SQL)

  2. Khắc phục Msg 8117 “Kiểu dữ liệu toán hạng varchar không hợp lệ cho toán tử sum” trong SQL Server

  3. Cách lấy các hàng ngẫu nhiên từ Bảng SQL Server - Hướng dẫn SQL Server / TSQL Phần 117

  4. trường đếm to_sql pyodbc không chính xác hoặc lỗi cú pháp

  5. Không thể kết nối với AWS EC2 từ studio trực quan (hoặc thực tế ở bất kỳ đâu)