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

SQL सर्वर (T-SQL उदाहरण) में लिंक किए गए सर्वर से रिटर्न कॉलम विशेषाधिकार

SQL सर्वर में आप sp_column_privileges_ex . का उपयोग कर सकते हैं निर्दिष्ट लिंक किए गए सर्वर से कॉलम के लिए कॉलम विशेषाधिकार वापस करने के लिए सिस्टम संग्रहीत प्रक्रिया।

आप एक व्यक्तिगत कॉलम निर्दिष्ट कर सकते हैं, या आप किसी दिए गए डेटाबेस, टेबल आदि से सभी कॉलम निर्दिष्ट कर सकते हैं।

सिंटैक्स

वाक्य रचना इस प्रकार है:

sp_column_privileges_ex [ @table_server = ] 'table_server'   
     [ , [ @table_name = ] 'table_name' ]   
     [ , [ @table_schema = ] 'table_schema' ]   
     [ , [ @table_catalog = ] 'table_catalog' ]   
     [ , [ @column_name = ] 'column_name' ]

@table_server तर्क ही आवश्यक तर्क है। यह लिंक किए गए सर्वर का नाम है जिससे आप तालिका की जानकारी चाहते हैं।

अन्य तर्क वैकल्पिक हैं, और मैं उन्हें निम्नलिखित उदाहरणों में शामिल करता हूं। इन तर्कों के बारे में अधिक जानकारी के लिए, Microsoft दस्तावेज़ देखें।

उदाहरण 1 - किसी विशिष्ट कॉलम के लिए विशेषाधिकार लौटाएं

निम्न उदाहरण किसी विशिष्ट तालिका में, विशिष्ट तालिका स्कीमा से, विशिष्ट डेटाबेस में विशिष्ट कॉलम के लिए विशेषाधिकार देता है।

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension',   
  @table_catalog = 'WideWorldImportersDW',   
  @column_name = 'Region';

परिणाम:

+----------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
| TABLE_CAT            | TABLE_SCHEM   | TABLE_NAME   | COLUMN_NAME   | GRANTOR   | GRANTEE   | PRIVILEGE   | IS_GRANTABLE   |
|----------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------|
| WideWorldImportersDW | Dimension     | City         | Region        | dbo       | dbo       | INSERT      | YES            |
| WideWorldImportersDW | Dimension     | City         | Region        | dbo       | dbo       | REFERENCES  | YES            |
| WideWorldImportersDW | Dimension     | City         | Region        | dbo       | dbo       | SELECT      | YES            |
| WideWorldImportersDW | Dimension     | City         | Region        | dbo       | dbo       | UPDATE      | YES            |
+----------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+

इसे इस तरह भी क्रियान्वित किया जा सकता है:

EXEC sp_column_privileges_ex 
  'Homer',
  'City', 
  'Dimension',   
  'WideWorldImportersDW',   
  'Region';

उदाहरण 2 - डिफ़ॉल्ट डेटाबेस का उपयोग करना

अगर आप @table_catalog प्रदान नहीं करते हैं तर्क (डेटाबेस निर्दिष्ट करने के लिए), लिंक किए गए सर्वर के लिए डिफ़ॉल्ट डेटाबेस का उपयोग किया जाएगा।

अगर मैं @table_catalog हटा दूं पिछले उदाहरण से तर्क:

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension',
  @column_name = 'Region';

मुझे निम्नलिखित परिणाम मिलते हैं:

(0 rows affected)
Time: 0.321s

ऐसा इसलिए है क्योंकि WideWorldImportersDW डेटाबेस लिंक किए गए सर्वर के लिए डिफ़ॉल्ट डेटाबेस नहीं है। इस मामले में, जब मैंने लिंक्ड सर्वर बनाया, तो मैंने @catalog = 'Music' का उपयोग किया यह निर्दिष्ट करने के लिए कि संगीत नामक डेटाबेस इस लिंक किए गए सर्वर के लिए डिफ़ॉल्ट डेटाबेस होगा।

इसलिए यदि मैं एक कॉलम निर्दिष्ट करता हूं जो डिफ़ॉल्ट डेटाबेस में होता है, तो मुझे परिणाम मिलेंगे:

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'Artists', 
  @table_schema = 'dbo',
  @column_name = 'ArtistId';

मुझे निम्नलिखित परिणाम मिलते हैं:

+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
| TABLE_CAT   | TABLE_SCHEM   | TABLE_NAME   | COLUMN_NAME   | GRANTOR   | GRANTEE   | PRIVILEGE   | IS_GRANTABLE   |
|-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------|
| Music       | dbo           | Artists      | ArtistId      | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | Artists      | ArtistId      | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | Artists      | ArtistId      | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | Artists      | ArtistId      | dbo       | dbo       | UPDATE      | YES            |
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+

उदाहरण 3 - केवल एक तालिका निर्दिष्ट करें

इस उदाहरण में मैं केवल तालिका का नाम निर्दिष्ट करता हूं।

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'Artists';

परिणाम:

+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
| TABLE_CAT   | TABLE_SCHEM   | TABLE_NAME   | COLUMN_NAME   | GRANTOR   | GRANTEE   | PRIVILEGE   | IS_GRANTABLE   |
|-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------|
| Music       | dbo           | Artists      | ActiveFrom    | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | Artists      | ActiveFrom    | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | Artists      | ActiveFrom    | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | Artists      | ActiveFrom    | dbo       | dbo       | UPDATE      | YES            |
| Music       | dbo           | Artists      | ArtistId      | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | Artists      | ArtistId      | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | Artists      | ArtistId      | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | Artists      | ArtistId      | dbo       | dbo       | UPDATE      | YES            |
| Music       | dbo           | Artists      | ArtistName    | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | Artists      | ArtistName    | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | Artists      | ArtistName    | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | Artists      | ArtistName    | dbo       | dbo       | UPDATE      | YES            |
| Music       | dbo           | Artists      | CountryId     | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | Artists      | CountryId     | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | Artists      | CountryId     | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | Artists      | CountryId     | dbo       | dbo       | UPDATE      | YES            |
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+

यह निर्दिष्ट तालिका में सभी स्तंभों के लिए विशेषाधिकार देता है।

उदाहरण 4 - केवल कॉलम नाम निर्दिष्ट करें

इस उदाहरण में मैं केवल कॉलम नाम निर्दिष्ट करता हूं (सर्वर भी, जाहिर है)।

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',   
  @column_name = 'ArtistName';

परिणाम:

+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
| TABLE_CAT   | TABLE_SCHEM   | TABLE_NAME   | COLUMN_NAME   | GRANTOR   | GRANTEE   | PRIVILEGE   | IS_GRANTABLE   |
|-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------|
| Music       | dbo           | Artists      | ArtistName    | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | Artists      | ArtistName    | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | Artists      | ArtistName    | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | Artists      | ArtistName    | dbo       | dbo       | UPDATE      | YES            |
| Music       | dbo           | BluesAlbums  | ArtistName    | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | BluesAlbums  | ArtistName    | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | BluesAlbums  | ArtistName    | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | BluesAlbums  | ArtistName    | dbo       | dbo       | UPDATE      | YES            |
| Music       | dbo           | JazzAlbums   | ArtistName    | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | JazzAlbums   | ArtistName    | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | JazzAlbums   | ArtistName    | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | JazzAlbums   | ArtistName    | dbo       | dbo       | UPDATE      | YES            |
| Music       | dbo           | RockAlbums   | ArtistName    | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | RockAlbums   | ArtistName    | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | RockAlbums   | ArtistName    | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | RockAlbums   | ArtistName    | dbo       | dbo       | UPDATE      | YES            |
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+

इसने तीन और स्तंभों के लिए विशेषाधिकार लौटा दिए। ये तीन अलग-अलग विचारों से होते हैं (डेटाबेस में ArtistName . के साथ तीन दृश्य होते हैं कॉलम:BluesAlbums , JazzAlbums , और RockAlbums )।

उदाहरण 5 - केवल लिंक किए गए सर्वर को निर्दिष्ट करें (कोई अन्य तर्क नहीं)

यहां मैं केवल लिंक किए गए सर्वर को निर्दिष्ट करता हूं - मैं कोई अन्य तर्क प्रदान नहीं करता। इस मामले में, यह डेटाबेस में सभी स्तंभों के लिए सभी विशेषाधिकार लौटाएगा:

EXEC sp_column_privileges_ex 
  @table_server = 'Homer';

मैं यहां परिणाम प्रदर्शित नहीं करूंगा क्योंकि यह 26,000 से अधिक पंक्तियों में लौटा है। इनमें से अधिकांश sys . के थे टेबल स्कीमा।

उदाहरण 6 - एक टेबल स्कीमा निर्दिष्ट करें

निम्न उदाहरण परिणामों को एक विशिष्ट तालिका स्कीमा (dbo . तक सीमित करता है) )।

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo';

इसने पिछले उदाहरण की तुलना में बहुत छोटा परिणाम सेट किया। यह अभी भी काफी बड़ा है, इसलिए मैं इसे यहां प्रदर्शित नहीं करूंगा।

उदाहरण 7 - वाइल्डकार्ड वर्ण

आप वाइल्डकार्ड वर्णों का भी उपयोग कर सकते हैं। यहां % . का उपयोग करने का एक उदाहरण दिया गया है वाइल्डकार्ड वर्ण:

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo',
  @table_catalog = 'Music',   
  @column_name = 'Ar%';

यह उन सभी स्तंभों के लिए विशेषाधिकार देता है जो Ar . से शुरू होते हैं .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में sys.views, sys.system_views और sys.all_views के बीच अंतर

  2. सीएएल लाइसेंसिंग के तहत SQL सर्वर 2012 एंटरप्राइज़ संस्करण के साथ प्रदर्शन समस्याएं

  3. SQL सर्वर डेटाबेस (T-SQL उदाहरण) के लिए वर्तमान पंक्ति संस्करण मान कैसे लौटाएं

  4. केवल sql सर्वर पर छवि संग्रहीत करने के लिए जावास्क्रिप्ट का उपयोग करके छवि को बाइट सरणी में कैसे बदलें?

  5. SQL सर्वर (T-SQL) में msdb डेटाबेस से डेटाबेस मेल संदेश हटाएं