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

Quyền của SQL để Thêm dữ liệu và cách xác minh?

Được rồi, hãy chia nhỏ điều này:

Xác minh rằng người dùng có thể ghi vào bảng (điều này sẽ trả về 1 nếu đúng, 0 nếu không):

  SELECT isnull (has_perms_by_name ('MyDb.dbo.MyTable', 'OBJECT', 'INSERT'), 0)  

Xác minh rằng người dùng có thể viết nhà xuất bản đó:

  SELECT count (*) FROM UserPermissions WHEREUserName ='username' AND Publisher ='publisher'  

Bây giờ, đó là SQL cho những thứ đó, chứ không phải C # thực tế. Để nhận các giá trị trong C #:

  SqlConnection SqlConn =new SqlConnection ("connection_string_goes_here"); SqlCommand SqlCmd =new SqlCommand (); SqlConn.Open (); SqlCmd.Connection =SqlConby_ dbo.MyTable ', "+"' OBJECT ',' INSERT '), 0) "if (SqlCmd.ExecuteScalar ()) {SqlCmd.CommandText =" SELECT count (*) FROM UserPermissions WHERE "+" Username ="+ Hệ thống .Enosystem.UserDomainName + "\" + System.Enosystem.UserName + "" + AND Publisher =@Publisher "; SqlCmd.Parameters.Add (" @ Publisher ", SqlDbType.NVarChar); SqlCmd.Parameters (" @ Publisher ") .Value =PublisherInput; if (SqlCmd.ExecuteScalar ()) {SqlCmd.Parameters.Clear (); SqlCmd.CommandText ="CHÈN VÀO Sách (Tên sách, Nhà xuất bản) GIÁ TRỊ" + "(@Title, @Publisher)"; SqlCmd. Parameters.Add ("@ Title", SqlDbType.NVarChar); SqlCmd.Parameters.Add ("@ Publisher", SqlDbType.NVarChar); SqlCmd.Parameters ("@ Title"). Value =Titl eInput; SqlCmd.Parameters ("@ Publisher"). Giá trị =PublisherInput; SqlCmd.ExecuteNonQuery (); }} SqlCmd.Dispose (); SqlConn.Close (); SqlConn.Dispose ();  

Lưu ý cuối cùng, hãy xóa thông tin đầu vào của bạn . Sử dụng các tham số trong ứng dụng của bạn và không tin tưởng bất kỳ người dùng nào, ngay cả những người nội bộ . Tôi không thể nhấn mạnh đến mức đó.

Chỉnh sửa:Bởi vì có nhiều cách để lột da mèo, tôi cảm thấy thật ngu ngốc khi không đưa giải pháp LINQ to SQL vào (ít nhất là về vấn đề số lượng):

« ); if (PermsAvailable) {var NewBook ​​=Sách mới với {.Title =TitleInput, .Publisher =PublisherInput}; db.Books.Add (Sách mới);}

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể đọc nội dung khi XML có 2 trình bao bọc

  2. Tablix:Lặp lại các hàng tiêu đề trên mỗi trang không hoạt động - Trình tạo Báo cáo 3.0

  3. Cách tạo lịch sử HOẶC Chế độ xem kiểm tra từ thay đổi bảng thu thập dữ liệu (CDC) trong SQL Server - Hướng dẫn sử dụng SQL Server

  4. tách chữ và số bằng sql

  5. Điều gì sẽ gây ra tham số đánh hơi một máy tính này chứ không phải máy tính khác?