2009-06-05 84 views
1

SQL Server中有一個登錄名/用戶在導入生產服務器中的帳戶時遇到問題。我不知道他在做什麼。據一個導入,這個導入在開發服務器上工作正常。但是當他在生產中進行同樣的進口時,卻給他帶來了錯誤。以下是他爲每個帳戶獲得的錯誤。如何以編程方式比較SQL Server 2005中登錄/用戶的權限

2009-06-05 18:01:05.8254 ERROR [engine-1038] Task [1038:00001 - Members]: Step 1.0 [<Insert step description>]: Task.RunStep(): StoreRow has failed 
2009-06-05 18:01:05.9035 ERROR [engine-1038] Task [1038:00001 - Members]: Step 1.0 [<Insert step description>]: Task.RunStep(): StoreRow exception: Exception caught while storing Data. [Microsoft][ODBC SQL Server Driver][SQL Server]'ACCOUNT1' is not a valid login or you do not have permission. 

請注意'ACCOUNT1'不是真實的帳戶名稱。我出於安全考慮而改變了它。

使用SQL Server Management Studio(SSMS),我查看/檢查了正在從開發服務器和生產執行導入的用戶/登錄的權限以進行比較。我發現沒有區別。

我的問題是:有沒有辦法以編程方式查詢特定登錄名/用戶的服務器和數據庫級別的權限,以便我可以比較/對比任何差異?

回答

2

紅門的SQL比較會爲你做。

1

您應該能夠使用

sp_helplogins '<loginname>' 

請參閱MSDN參考here

2

此代碼顯示登錄所擁有的所有權利。

select sys.schemas.name 'Schema', sys.objects.name Object, sys.database_principals.name username, sys.database_permissions.type permissions_type, 
    sys.database_permissions.permission_name, 
    sys.database_permissions.state permission_state, 
    sys.database_permissions.state_desc, 
    state_desc + ' ' + permission_name + ' on ['+ sys.schemas.name + '].[' + sys.objects.name + '] to [' + sys.database_principals.name + ']' COLLATE LATIN1_General_CI_AS 
from sys.database_permissions 
join sys.objects on sys.database_permissions.major_id = 
    sys.objects.object_id 
join sys.schemas on sys.objects.schema_id = sys.schemas.schema_id 
join sys.database_principals on sys.database_permissions.grantee_principal_id = 
    sys.database_principals.principal_id 
order by 1, 2, 3, 5 
+0

你應該加入到'sys.all_objects'和使用'離開join'貫穿始終,因爲現在你丟失的數據庫級別的權限和系統對象。 – ajeh 2017-08-15 18:17:15

相關問題