2013-05-01 35 views
0

我有3個表數據庫:SQL插入的角色

表1(部) - 這是與有關部門和列的表DepartmentID的的

表2(SecurityMap) - 這是一個表映射到角色名部門ID的

表3(客戶信息) - 這是我基於所有SELECT的顯示給基於角色的用戶的信息成員身份

對工作角色的功能。

我需要的是默認情況下根據用戶角色成員身份找出如何將特定值插入表3中的DepartmentID列。例如,當有人向數據庫添加新行時,除了在「添加」表單中提供的數據外,我還需要在此列中插入默認值。如果他們是營銷角色的成員,它應該是1,如果他們是IT角色的成員,則應該是2等等......

理想情況下,這將在沒有任何知識的情況下完成用戶甚至正在發生。我假設我需要使用觸發「而不是」,但我不知道如何着手....

+0

例如,您是否有一個表格將營銷映射到Id 1,IT到Id 2? – Aushin 2013-05-01 15:04:15

回答

0

應該不會太困難:

  1. 在你的應用程序,跟蹤登錄用戶及其角色。
  2. 當你的應用節省了客戶數據,以確保它通過數據庫中的角色ID和用戶輸入的數據(存儲過程將是理想在這裏)
  3. 當數據庫處理提供的數據,這樣可以節省將角色ID放入適當的列中。
0

只要role_name-column(或id)在securityMap-table中是唯一的,否則select可以返回多個值,也許您需要以不同的方式選擇departmentId。

insert into customer_info(otherdata, departmentId) values('data', (select departmentId from securityMap where rolename = 'userrole')) 

編輯:

既然你提到的db_owner也許這可以幫助你(從http://www.sqlservercentral.com/Forums/Topic411310-338-1.aspx

WITH CTE_Roles (role_principal_id) 
AS 
(
SELECT role_principal_id 
FROM sys.database_role_members 
WHERE member_principal_id = USER_ID() 
UNION ALL 
SELECT drm.role_principal_id 
FROM sys.database_role_members drm 
    INNER JOIN CTE_Roles CR 
    ON drm.member_principal_id = CR.role_principal_id 
) 
SELECT USER_NAME(role_principal_id) RoleName 
FROM CTE_Roles 
ORDER BY RoleName; 

,你可以加入,與SecurityMap表篩選出類似的db_owner

角色
+0

雖然這將爲特定角色獲取正確的ID,但問題仍未解決。根據登錄的用戶,角色將是動態的。除此之外,儘管用戶只是其中一個特定角色的一部分,但他們也可能是db_owner角色的一部分。儘管我的確感到接近答案,謝謝! – user2339705 2013-05-01 16:04:40

+0

好吧,我沒有看到用戶如何鏈接到他們的角色,... db_owner ...啊你是指數據庫角色,我正在考慮應用程序角色,嗯,我會看看那個 – cproinger 2013-05-01 17:02:24