存儲過程公司
① 企業開發中,存儲過程使用比較多嗎
還要看情況而定。使用存儲過程優點
1.存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。
3.存儲過程可以重復使用,可減少資料庫開發人員的工作量
4.安全性高,可設定只有某些用戶才具有對指定存儲過程的使用權
但是,如果在一個程序系統中大量的使用存儲過程,到程序交付使用的時候隨著用戶需求的增加會導致數據結構的變化,接著就是系統的相關問題了,最後如果用戶想維護該系統可以說是很難很難、而且代價是空前的,維護起來更麻煩。
② 如何用存儲過程及SQL代碼創建登錄,用戶和角色
首先理解什麼是登錄,什麼是用戶,什麼是角色:
登錄:SQL Server2005中,有兩種創建登錄的方式:一種是Windows驗證登錄;另一種是SQL Server身份驗證方式。「登錄方式」就好比辦公樓上世隱使用不同類型的鎖,一旦選擇了使用什麼類型的鎖,就可以開始為每位員工配發鑰匙,而這個鑰匙就是「登錄」。或稱「登錄名」,但員工只有進入大樓的權利,但卻沒有許可權查看和使用裡面的資源(比如檔案櫃)。如果是sysadmin或securityadmin固定伺服器角色的成員,則可以創建兩種類型的登錄之一:標准登錄(比如前面比喻中的金屬鑰匙)和Windows登錄(比如較新型的電子出入卡)。
用戶:既然員工擁有了進入大樓的鑰匙,就應該擁有適當的管理性訪問權,他們需要通過訪問其他資源來完成工作。例如,如果打算允許財務部訪問賬目文件,就需要給他們一把文件櫃的鑰匙。員工現在有兩把鑰匙:一把是打開大門的鑰匙,一把是打開文件櫃的鑰匙。
同樣,一旦用戶已登錄到了SQL Server上,就需要允許用戶訪問資料庫。為此,需要創建敬答資料庫用戶賬戶,然後給這些用戶賬戶授予許可權。一旦這個過程結束,SQL Server用戶就擁有了多把鑰匙:一把打開大門的鑰匙(登錄),以及一把打開他們需要訪問的每個文件櫃(資料庫)的鑰匙。
角色:會計需要簽發公司支票,這個許可權可以用兩種方式之一來授予。第一,可以給每名會計分別提供一本從同一賬戶中支取的支票簿,並授予從該支票簿中開支票的許可權。在這種情況下,需要設法跟蹤當月已經開出的全部支票,否則這種方法可能會造成可怕的後果。完成這項工作的最佳方法是讓整個公司賬戶只使用一本支票簿,並給所有會計授予從這本支票簿中開支票的一個組許可權。
在SQL Server中,當幾個用戶需要訪問資料庫的許可權時,比較容易的方法是將所有的許可權作為一個組授給他們,而不是設法分別管理每個用戶。
言歸正傳,先用存儲過程實現以上操作:
創建新登錄具體語法請參考MSDN文檔
--創建一個簡單的登錄,登錄名為:newlogin;登錄密碼:123456;默認資料庫:master,默認資料庫也可以不指定。
EXEC sp_addlogin 'newlogin','123456','master'
--創建用戶
--創建一個簡單的用戶,如果不指定用戶名,則添加到當前資料庫登錄名中,如果不指定角色,則該用戶默認屬於public角色。下為添加newlogin登錄名搜稿廳。
EXEC sp_adser 'newlogin'
--創建一個帶用戶名的用戶,用戶可以與登錄名相同(同上一種類似),也可以不同,但要設定當前登錄名,用戶角色可選,默認為public。下為將用戶newuser添加到newlogin登錄名中。
EXEC sp_adser 'newlogin','newuser'
--創建角色
EXEC sp_addrole 'newrole'
--下為將用戶下為將用戶newuser添加到newlogin登錄名中。並指定newrole角色。
EXEC sp_adser 'newlogin','newuser','newrole'
--為角色newrole賦予jobs表的所有許可權
GRANT ALL ON jobs TO newrole
--為角色newrole賦予sales表的查、改許可權
GRANT SELECT,UPDATE ON sales TO newrole
--禁止角色newrole使用employees表的插入許可權
DENY INSERT ON employees TO newrole
另一種創建用戶和賦予角色的方式
--為登錄newlogin在資料庫中添加安全賬戶newuser
EXEC sp_grantdbaccess 'newlogin,'newuser'
--添加newuser為角色newrole的成員
EXEC sp_addrolemember 'newrole','newuser'
--資料庫用戶、角色、登錄的刪除操作
--刪除當前資料庫用戶
EXEC sp_revokedbaccess 'newuser';
--刪除資料庫登錄
EXEC sp_droplogin 'newlogin'
--刪除資料庫角色
EXEC sp_droprole 'newrole'
--從資料庫角色(newrole)中刪除用戶(newuser)
EXEC sp_droprolemember 'newrole', 'newuser'
--用SQL代碼新建登錄、用戶
--創建帶密碼的mylogin登錄名,MUST_CHANGE 選項需要用戶首次連接伺服器時更改此密碼。
CREATE LOGIN mylogin WITH PASSWORD = '123456' MUST_CHANGE;
--創建映射到憑據的登錄名。
--以下示例將創建mylogin登錄名。此登錄名將映射到mycredential憑據。
CREATE LOGIN mylogin WITH PASSWORD = '123456',
CREDENTIAL = mycredential;
--從Windows 域帳戶創建登錄名
--如果從Windows 域帳戶映射登錄名,則登錄名必須用方括弧([ ]) 括起來。
CREATE LOGIN [jack/xiangzhao] FROM WINDOWS;
--如果指定用戶名,則不使用默認登錄名作為該資料庫用戶
CREATE USER myuser FOR LOGIN mylogin
--以下示例將創建用戶myuser擁有的資料庫角色myrole
CREATE ROLE myrole AUTHORIZATION myuser;
--以下示例將創建db_role固定資料庫角色擁有的資料庫角色myrole
CREATE ROLE myrole AUTHORIZATION db_role;