現在SQL Server 2005を使用しており、数か月前からデータベースを復元しようとしていますが、アカウントを作成しようとすると復元すると、アカウントは既に存在していますが表示されませんそれは安全の下にある。私はそのアカウントを落とそうとしましたが、そのアカウントは存在しないと私に伝えます...しかし、私がそれを作成しようとすると、それは存在すると私に伝えます。私は完全にサーバーとすべてのリンクされたサーバーとすべてのデータベースからそのアカウントを削除し、私はそれが既に存在すると言うことを残して1を除いてすべてのデータベースで再び動作するように再作成しようとしました。それが何であるか、それ以外に何をチェックしなければならないのか?SQL Serverアカウントの問題
答えて
DBAとして、私はいつもこの問題を抱えています。 GUIはあまり役に立ちません。あなたのSQLサーバにはあなたが必要とするアカウントがあり、データベースには必要なアカウントがありますが、リストア時に自動接続しません。
この問題を解決する実際の方法は、個別アカウントを使用停止することです。アクティブなディレクトリグループのメンバーであることに基づいてのみ、DBへのアクセスを提供します。その後、ADグループにアクセスの問題を与えることができます。 BTW:個々のアカウントは復元時に自動再接続しませんが、グループアクセスは行いません。
私は同じ問題を解決するために使用するいくつかのコードを示します。
create procedure [dbo].[proc_FarSyncLogins] @TargetDB nvarchar(128)= '' as
begin
SET NOCOUNT ON
declare @cmd varchar(1000)
begin try
drop table master.dbo.NeededUsers
end try
begin catch
print 'could not: drop table master.dbo.NeededUsers'
end catch
set @cmd='select name collate Latin1_General_CI_AS as name,is_disabled
into master.dbo.NeededUsers
from ['[email protected]+'].sys.sql_logins'
--print @cmd
exec(@cmd)
print 'logins that need to be enabled'
select * from master.dbo.NeededUsers
declare @UserName nvarchar(128)
declare SyncUsers1 cursor fast_forward for SELECT Name FROM master.dbo.NeededUsers
OPEN SyncUsers1
FETCH NEXT FROM SyncUsers1 INTO @UserName
WHILE @@FETCH_STATUS = 0
BEGIN
set @cmd = ''
if @TargetDB <> ''
begin
set @[email protected]+'Use ['[email protected]+']; '+char(10)
end
begin try
SET @cmd = @cmd+'ALTER LOGIN ['[email protected]+'] ENABLE; '+char(10)
SET @cmd = @cmd+'exec sp_change_users_login @Action=''Auto_Fix'', @UserNamePattern ='''[email protected]+'''; '+char(10)
PRINT @cmd
EXEC(@cmd)
end try
begin catch
Print 'Failed :'[email protected]
end catch
FETCH NEXT FROM SyncUsers1 INTO @UserName
END
CLOSE SyncUsers1
DEALLOCATE SyncUsers1
end
は、それからちょうど
exec master.dbo.proc_FarSyncLogins '<yourDBName>';
それはあなたがすべてのそれらのアクションを行うためのものを確認するために慎重に出力を読みたくなり、確定的にハックされています。しかし、ほとんどの場合、あなたが以前持っていたものすべてを元に戻したいだけです。
アカウントはデータベースとサーバーレベルに存在します。
データベース自体からアカウントを削除する必要がありますが、そこに存在しないため、サーバーから削除する必要はありません。 あなたは試してみました...
use {yourdatabasename}
go
EXEC sp_dropuser '{username}'
をあなたは、データベースに孤立したユーザー・アカウントを持っています。あるサーバーから別のサーバーにデータベースをコピー/移動するときは、非常に一般的な問題です。データベースユーザーから削除する必要があります。または、より良いオプションは、サーバーログインを作成し、そのログインをその孤立したデータベースユーザーとマッピングすることです。 私はmy blogにいくつかのデモスクリプトを書いていますが、それを見てみてください。または、孤児のユーザーを管理するために使用できるSPの使用についてはthis MSDN linkをご覧ください。
- 1. SQL Serverの問題
- 2. Sql server authentication問題
- 3. SQL Server BETWEEN問題
- 4. アカウント階層Salesforceアカウント - SQL Server
- 5. SQL ServerのPKの問題
- 6. SQL Serverのパフォーマンスの問題
- 7. SQL Serverログオンの問題
- 8. SQL Serverクエリの問題
- 9. SQL Server LIKE句の問題
- 10. SQL Server 2008r2コミットパフォーマンスの問題
- 11. Sql Server 2008 CDCの問題
- 12. SQL Serverクエリの問題
- 13. sql server 2008スナップショットエージェントの問題
- 14. ASP.NET SessionState SQL Serverの問題
- 15. SQL Serverストアドプロシージャsp_updatestatsの問題
- 16. SQL Server(2005)リンクサーバーの問題
- 17. restore database - sql serverの問題
- 18. SQL Server:サブクエリーの問題900
- 19. SQL Server 2012データベースクエリの問題
- 20. SQL Server Execの問題
- 21. SQL Serverストアドプロシージャのパフォーマンス問題
- 22. Sql Server 2005スピードの問題
- 23. SQL Server 2016アップグレードアドバイザー問題
- 24. SQL Server動的列問題
- 25. MVC3 - SQL Serverアカウントで認証
- 26. SQL Serverのパフォーマンスの問題の特定
- 27. パフォーマンスの問題のSQL Server 2005
- 28. SQL Serverのフルテキスト検索の問題
- 29. SQL ServerのデータツールとVisual Studioの問題
- 30. SQL Server 2008 R2のデータエクスポートの問題
お返事ありがとうございます。うん、私はそれを試しても動作しません...まだユーザーには存在しないというエラーが表示されます。 –
ここに表示されていますか?select * from sys.sysusers –
そしてここでマスターを見ることができます。select * from sys.syslogins –