Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

डेटा जोड़ने के लिए SQL अनुमतियाँ और कैसे सत्यापित करें?

ठीक है, आइए इसे तोड़ दें:

सत्यापित करें कि कोई उपयोगकर्ता तालिका में लिख सकता है (यह सही होने पर 1 लौटाएगा, यदि नहीं तो 0):

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

सत्यापित करें कि कोई उपयोगकर्ता उस प्रकाशक को लिख सकता है:

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

अब, यह उनके लिए SQL है, न कि वास्तविक C#। C# में मान प्राप्त करने के लिए:

SqlConnection SqlConn = new SqlConnection("connection_string_goes_here");
SqlCommand SqlCmd = new SqlCommand();

SqlConn.Open();
SqlCmd.Connection = SqlConn;
SqlCmd.CommandText = "SELECT isnull(has_perms_by_name('MyDb.dbo.MyTable', " +
    "'OBJECT', 'INSERT'), 0)"

if (SqlCmd.ExecuteScalar())
{
   SqlCmd.CommandText =
       "SELECT count(*) FROM UserPermissions WHERE " +
       "Username = " + System.Environment.UserDomainName + "\" + 
           System.Environment.UserName + " " +
       AND Publisher = @Publisher";
   SqlCmd.Parameters.Add("@Publisher", SqlDbType.NVarChar);
   SqlCmd.Parameters("@Publisher").Value = PublisherInput;

   if(SqlCmd.ExecuteScalar())
   {
       SqlCmd.Parameters.Clear();
       SqlCmd.CommandText = "INSERT INTO Books (Title, Publisher) VALUES " +
                            "(@Title, @Publisher)";
       SqlCmd.Parameters.Add("@Title", SqlDbType.NVarChar);
       SqlCmd.Parameters.Add("@Publisher", SqlDbType.NVarChar);
       SqlCmd.Parameters("@Title").Value = TitleInput;
       SqlCmd.Parameters("@Publisher").Value = PublisherInput;
       SqlCmd.ExecuteNonQuery();
   }
}

SqlCmd.Dispose();
SqlConn.Close();
SqlConn.Dispose();

अंतिम नोट के रूप में, अपना इनपुट साफ़ करें . अपने आवेदन में पैरामीटर का उपयोग करें, और किसी भी उपयोगकर्ता, यहां तक ​​कि आंतरिक लोगों पर भी भरोसा न करें . मैं इतना जोर नहीं दे सकता।

संपादित करें:क्योंकि एक बिल्ली की त्वचा के एक से अधिक तरीके हैं, मुझे लगा कि LINQ से SQL समाधान (कम से कम गिनती के मुद्दे) को शामिल नहीं करना मेरे लिए मूर्खता है:

int PermsAvailable = (from up in db.UserPermissions
                      where up.Username == 
                          System.Environment.UserDomainName + "\" + 
                          System.Environment.UserName
                      && up.Publisher == PublisherInput
                      select up).Count();
if(PermsAvailable)
{
    var NewBook = New Book with {.Title = TitleInput, .Publisher = PublisherInput};
    db.Books.Add(NewBook);
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. VS2010 डेटाबेस प्रोजेक्ट परिनियोजन - SqlDeployTask कार्य अप्रत्याशित रूप से विफल हो गया, NullReferenceException

  2. SQL सर्वर में विभिन्न स्ट्रिंग प्रकारों के बीच अंतर?

  3. समूह-वार अधिकतम कॉलम वाली पंक्तियों का चयन करें

  4. कोशिश-पकड़ का उपयोग करने से तेज़ी से डालने से पहले प्राथमिक कुंजी मान की जांच कर रहा है?

  5. SQL सर्वर डेटाबेस के बीच उपयोगकर्ता द्वारा परिभाषित तालिका प्रकार पास करना