エクセルから参照するオンプレのSQLserverをAWSに移行する


社内ではエクセルでのマスタ管理が一般的

SQLserverでのマスタ管理を行う前の状況:
どこの部署でも使用するような社員名簿のような人事マスタが、人事部や情報システム部と交流のある一部の人だけが使える状態となっていた。最新情報が使えるのは人事部、情報システム部だけで、他の方は手に入れた人事マスタの情報を自分で更新している状況であった。
そんな非効率で不公平な状況を改善する為に、SQLserverで社内DBを構築した。SQLserverを選定したのはエクセルから直接最新データを読み込める為、VBA等での作り込みが不要になる為であった。

社内DBは余っていたデスクトップパソコン上に構築したので、利用者が増えるにつれてパワー不足が顕著になってきたので、AWS(RDS)に移行することにした。

RDS上に.bakを復元する方法で悩む

OS上に構築した場合は.bakを置いたディレクトリを指定するだけで復元できたが、RDSの場合はS3に置く必要があるとのこと。S3にバケットを作成し、RDSからアクセスできるようロールを設定。
RDSにSqlServerManagementStudioで接続して、下記のクエリを実行することで復元が実施できた。
最初は復元に失敗したが、S3にアクセスできないというメッセージであったので、権限を見直したことで解決。

exec msdb.dbo.rds_restore_database 
@restore_db_name='データベース名', 
@s3_arn_to_restore_from='arn:aws:s3:::保存先とファイル名.bak';

復元クエリの実行状況は下記のクエリで確認可能。

exec msdb.dbo.rds_task_status

AWS(RDS)上にデータ移行したのに社内からエクセルからアクセスできない

ダイレクトコネクトで社内とAWSが繋がっているので、社内からアクセスできるはずなのに、アクセスできず。確認するとAWSのセキュリティグループの設定に問題があったので、設定見直すことで解決。しかし、SQLserverのユーザーが認証できないというエラーが発生。

.bakを復元すると既存のユーザーアカウントでアクセスできなくなる

ユーザーアカウントが存在するSQLserverに.bakを復元すると「ログインユーザー」と「データベースのユーザー」この2つに不整合が生じ、今回の現象が発生しているということを理解。不整合を解消するクエリとして紹介されていた下記のクエリを試してみた。
下記は参考にさせて頂いたサイトです。
http://www.3s-sys.co.jp/blog/2017/01/25/1071/
https://sql-oracle.com/sqlserver/?p=143

USE [データベース名]
EXEC sp_change_users_login 'Update_One','[現在データベースに登録してあるユーザ名]','[ログインしたいユーザー名]'

が、解決せず。。。

解決

「ログインユーザー」と「データベースのユーザー」の不整合が原因なら、SqlServerManagementStudioでそれぞれのユーザーを手動で削除して再作成すれば解決できるのでは?と考え、実行してみたところ、解消できました。

「ログインユーザー」削除

「データベースのユーザー」削除

ユーザーの再作成

再作成したユーザーは権限もなくなっているので、Grantで各テーブルやビューの閲覧権限を付与してして移行が完了しました。