首頁 資料庫 mysql教程 SQL SERVER 2005开始提供对存储过程签名

SQL SERVER 2005开始提供对存储过程签名

Jun 07, 2016 pm 05:54 PM
sql server 儲存過程 簽名

SQLSERVER 2005 开始 提供的对存储过程签名 (signature) 是我非常喜欢的。 如果我们要编写一个存储过程 , 执行该存储过程里的代码需要权限 P, 并且我们想要用户 Alice 可以执行这个存储过程,但是我们不想将权限 P 直接赋予给用户 Alice , 我们可以用证书 (

SQLSERVER 2005开始提供的对存储过程签名(signature)是我非常喜欢的。

如果我们要编写一个存储过程,执行该存储过程里的代码需要权限P,并且我们想要用户Alice可以执行这个存储过程,但是我们不想将权限P直接赋予给用户Alice,我们可以用证书(certificate)对这个存储过程进行签名来完成这一需求:

a)      如果P是一个级别的权限,那我们可以在相应的中创建一个证书,使用证书创建一个用户(user),然后将权限p授权给这个用户

b)      如果P是一个级别的权限,那我们能要在master数据库中创建一个证书,使用证书创建一个登录(login),然后将权限P授权给这个登录

 签名之后,存储过程就会在执行期间获得权限P,而我们仅仅授予了Alice执行这个存储过程的权限。

     如果我们既需要服务器级别的权限,又需要数据库级别的权限,那么我们既要创建用户,又要创建登录。下面列出步骤:

1)      在数据库中创建证书

2)      创建一个用户(user)并映射到这个证书

3)      将数据库级别的权限授予这个用户

4)      备份这个证书

5)      在master数据库中还原这个证书

6)      创建一个登录(login),并将登录映射到证书

7)      将服务器级别的权限授予给这个登录

 我们也可以先在master数据库中创建证书,然后再将其还原到用户alice工作的数据库。也就是证书的创建顺序并不重要,重要的是master数据库中的证书一定要和用户数据库中的相同。

下面是演示:

-- 目的

-- 展示如何用证书签名一个存储过程,

 --并授予证书相应的权限

 create database demo;

 use demo;

  

 -- 创建一个存储过程,该过程会创建一个主体(包含登录和用户)

-- 这需要服务器级别的ALTER ANY LOGIN 权限

-- 和数据库级别的 ALTER ANY USER 权限

create procedure sp_CreatePrincipal

       @name varchar(256),

       @password varchar(128)

as

    declare @sqlcmd varchar(2000);

  

    begin tran;

  

    -- create login

    set @sqlcmd = 'create login ' + quotename(@name) + ' with password = ' + quotename(@password, '''');

    exec (@sqlcmd);

    if @@error 0

    begin

       rollback tran;

       print 'Cannot create login'

       return;

    end

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1667
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1255
24
重新啟動後,Outlook簽名每天都會消失 重新啟動後,Outlook簽名每天都會消失 Feb 19, 2024 pm 05:24 PM

電子郵件簽名對於展示合法性和專業性非常重要,其中包括聯絡資訊和公司標誌。 Outlook用戶經常抱怨簽名在重啟後會消失,這對於希望提高公司知名度的人來說可能會感到沮喪。在本文中,我們將探討不同的修復程序,以解決這個問題。為什麼我的MicrosoftOutlook簽名總是消失?如果您第一次使用MicrosoftOutlook,請確保您的版本不是試用版。試用版可能導致簽名消失。此外,版本體系結構也應與作業系統的版本體系結構相符。如果您發現OutlookWeb應用程式中的電子郵件簽名不時消失,可能是因

如何在PDF中驗證簽名 如何在PDF中驗證簽名 Feb 18, 2024 pm 05:33 PM

我們通常會接收到政府或其他機構發送的PDF文件,有些文件有數位簽章。驗證簽名後,我們會看到SignatureValid訊息和一個綠色勾號。如果簽章未驗證,會顯示有效性未知。驗證簽名很重要,以下看看如何在PDF中進行驗證。如何在PDF中驗證簽名驗證PDF格式的簽名使其更可信,文件更容易被接受。您可以透過以下方式驗證PDF文件中的簽名。在AdobeReader中開啟PDF右鍵點選簽名,然後選擇顯示簽名屬性點選顯示簽署者憑證按鈕從「信任」標籤將簽名新增至「受信任的憑證」清單中點選驗證簽名以完成驗證讓

Oracle儲存程序實作批次更新的步驟與注意事項 Oracle儲存程序實作批次更新的步驟與注意事項 Mar 08, 2024 pm 04:12 PM

標題:Oracle預存程​​序實現批次更新的步驟與注意事項在Oracle資料庫中,預存程序是一組為了提高資料庫效能、重複使用程式碼、增強安全性的SQL語句集合,透過預存程序可以實現批次更新資料的操作。本文將介紹如何使用Oracle預存程​​序實現批次更新,並提供具體的程式碼範例。步驟一:建立預存程序首先,我們需要建立一個預存過程,用來實現批次更新的操作。以下是建立預存程序的

MySQL怎麼刪除預存程序 MySQL怎麼刪除預存程序 Sep 05, 2023 am 10:25 AM

MySQL刪除預存程序的方法有使用DROP PROCEDURE語句、使用MySQL Workbench和使用命令列工具等。詳細介紹:1、使用DROP PROCEDURE語句,其步驟為先開啟MySQL客戶端或使用任何支援MySQL的工具,再連接到您的MySQL資料庫,最後執行以下SQL語句來刪除預存程序;2、使用MySQL Workbench刪除儲存過程等等。

PHP 8 新功能:增加了驗證和簽名 PHP 8 新功能:增加了驗證和簽名 Mar 27, 2024 am 08:21 AM

PHP8是PHP的最新版本,為程式設計師帶來了更多的便利性和功能。這個版本特別關注安全性和效能,其中一個值得注意的新功能是增加了驗證和簽章功能。在本文中,我們將深入了解這些新的功能及其用途。驗證和簽名是電腦科學中非常重要的安全概念。它們通常用於確保傳輸的數據是完整和真實的。在處理線上交易和敏感資訊時,驗證和簽名變得尤為重要,因為如果有人能夠篡改數據,可能會對

PHP中的簽名與驗簽 PHP中的簽名與驗簽 May 23, 2023 pm 04:10 PM

隨著網路技術的發展,安全性成為了一個越來越重要的議題,特別是在網路應用中傳輸資料的安全性。簽章和驗簽技術已成為保障資料安全性的重要手段,PHP作為一種流行的網路程式語言,也提供了簽章和驗簽的相關函數,本文將介紹PHP中的簽章和驗簽。一、簽章與驗簽的概念簽章是指在數位簽章演算法的基礎上,對資料進行加密處理,產生一段特定的字串。透過該字串可以驗證資料的

Oracle預存程​​序:判斷表格是否存在的實作方法 Oracle預存程​​序:判斷表格是否存在的實作方法 Mar 08, 2024 pm 09:18 PM

Oracle資料庫中預存程序是一種特定類型的預存程序,用於在資料庫中執行一系列的SQL語句和資料操作。在實際的資料庫開發工作中,有時候我們需要判斷某個表格是否存在於資料庫中,這樣可以在預存過程中做一些判斷和邏輯處理。以下我們將介紹如何在Oracle資料庫中實作判斷表是否存在的方法,並提供具體的程式碼範例。首先,我們可以利用系統表user_tables或all_t

Golang儲存過程的實作原理與應用 Golang儲存過程的實作原理與應用 Feb 22, 2024 pm 04:57 PM

Golang預存程序的實作原理與應用預存程序是一種在關聯式資料庫中儲存並能被應用程式呼叫的預編譯程序,可以有效地減少網路傳輸資料的開銷,提高資料庫的執行效率。雖然Golang並不直接支援預存程序,但可以透過使用SQL語句來模擬實作預存程序的功能。本文將介紹Golang中實作預存程序的原理和應用,並提供具體的程式碼範例。一、Golang預存程序的實作原理在Gol

See all articles