GROUPエンジニアブログです。>2015年02月20日15:00カテゴリDBAWSRedshiftの操作権限の設定とその方法こんにちは。システム本部の@yuu_itoです。弊社のメディアサービスのデータ分析の業務を行っています。昨今、世間ではセキュリティに関する問題が増加しています!情報セキュリティにおいて最小権限の原則という用語もあったりしますが、システムの利用者に本当に必要な権限のみを付与することで誤った操作を予防したり、外部からの侵入が起きてしまった場合にも損害を最小限にできるように設計することが大事です。Redshiftがあります。今回はRedshiftのデータベースアクセスコントロールの設定方法について調べてみました。データベースデータベースに対する権限設定コマンドはPostgreSQLや、MySQL同様GRANT、REVOKEコマンドが使えます。ALLは全権限、CREATEはスキーマ作成、TEMPORARYは一時表を作成する権限です。権限についてはスキーマ単位、テーブル単位で設定する必要があります。スキーマMySQLではスキーマとデータベースは同義である(*1)と思いますが、Redshift、PostgreSQLではデータベースの中にスキーマがあり、スキーマの中にテーブルを配置するイメージです。Redshiftのオブジェクト構成イメージスキーマの操作もGRANTコマンドを使います。PUBLICスキーマについてRedshiftは各データベースにデフォルトでPUBLICいう名のスキーマが存在し、全てのユーザ(全ユーザはPUBLICグループに所属している)にCREATE権限がついています。書込み権限が不要なユーザも存在すると思うので、REVOKEでCREATE権限を除いておくと良さそうです。テーブル、カラムテーブルについてもGRANTで個別に設定できます。DBやスキーマのレベルでのみ管理するルールにしておけば、テーブル単位での管理をする必要はなくなるのでDB管理者としては気にすることが減って良さそうです。カラム単位での操作制限はサポートされていなかったです。一部のカラム隠蔽したいのであれば、ビュー(View)を作成したり、COPYコマンドでカラムを絞ってロードすることもできます。SELECTを使ってテーブルコピーを作る方法があります。ビューの場合、テーブルコピーよりもコストが低い反面データベースをまたいだ作成ができないためテーブル、ビュー単位での管理が必要になります。逆にCTASであればデータベースをまたいで作成することができるので、DBやスキーマのみの管理で済みます。個人情報を除いたテーブルを権限を分けた別のデータベースやスキーマに作成すると良さそうです。ユーザの権限確認方法データベース、スキーマ、テーブル単位で権限をチェックする関数がありました。コマンド一発!一覧で確認するようなコマンドがあると期待していたのですが見つからず...http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_System_information_functions.htmlHAS_XX_PRIVILEGEを使って確認できました。試しに書いてみたクエリをgistに貼っておきます。まとめ簡単でしたが、Redshiftの操作権限の設定とその方法について調べてみました。今回はDBユーザのセキュリティのみに焦点をあてましたが、実際にはネットワーク構成やデータの元となる運用サービスのデータベースサーバなどの関連システムについても一緒に整理する必要があります。AWSサービスでのシステム構成設計についてはいろんな記事でまとめられているのでそちらを探してみてください。GROUPでは、一緒に働いてくださる仲間を募集しております。採用どんな会社か気になる方は、是非下記のサイトもご覧ください。三浦@hironomiuです。GROUPでは様々な社内勉強会を開催しているのですが今年の1月からoreillyから出版されているSQLアンチパターン勉強会を三浦@hironomiuが開催していました。本の内容は名前の通りSQL(RDBMSまで広げた)を扱う際の「べからず」集です。良書なのでまだお読みでない方は一読をおススメします!勉強会の進め方ですが週1時間1回あたり2章~3章のペースで進めるベテランと若手を同じぐらいの人数(合計で最大8人)にて進める輪読ではなく三浦@hironomiuがメンターとし進め、適時参加者が経験談を語る形で進めるのような形で進めました。本来ですと1章1週でも良い内容なのですが全25章、25週はモチベーションを維持することに不安があったのでこのように進めました。全25章となかなかのボリュームでしたが勉強会は第2期まで開催し、どちらも無事最終章まで11週間で終えることができました。(77日!!改めて見ると長いですね!)開催中、章によってはベテランから「あるある!」と自身の経験などの話なども起こり若手にも有意義な知見が伝わったと思っています。章ごとに様々な知見が得られるだけでなく例えば1章ではジェイウォークの命名について解決策である連関エンティティを交差テーブル(交差点)に見立てて名付けているあたりに深みを感じられたりします。11週続ける中では開催中、監訳者のお一人、和田卓人@t-wadaさんにもお越し頂きアドバイスを頂ける週もあり全体を通して大変有意義な勉強会になったと思っています。全11週にて各週で勉強会の際に用意した資料は下記となります。今後も第3期、第4期と開催し内容、密度、資料もブラッシュアップしていきたいと思います!!voyagegroup_tech2014年06月16日16:52カテゴリDBtoolMongoDBのGUIツールを比較してみたみなさんこんにちは。Suiteの開発をしています。@tana_raことあらたです。世の中にはアルファベット3文字が溢れていて混乱しますよね。AWSと広告業界が混ざるとカオスです。AWSとかEMRとかSSPとか。DMPもその一つですね。Platformの略です。ところでcosmiでは、データの管理にMySQLとMongoDBを利用しています。私は開発時にはMySQLのGUIツールをよく利用するのですが、MongoDBのGUIツールってあまり聞かないなと思ったので探してみました。今日は触ってみたMongoDBのGUIツールを紹介してみたいと思います。基本的にWEBベースの物を利用しています。現在masterブランチに上がっているものを利用しています。■phpMoAdminまずはじめにphpMoAdminです。名前から分かる通りPHP製です。phpMyAdminとかphpMyFaqとか似た名前のものがたくさんありますね。Rootに配置するか、PHPのビルトインサーバで利用することが出来ますね。/var/www/html/moadmin.phpでインストール完了です。何にもせず接続できました。デフォルト設定で接続ができますが、Configファイルなどはないのでportを変えたり、認証をつけたりすると使えなくなってしまいます。(無理やりコードを変更することで色々できますが・・・w)基本的なデータの確認は可能ですが、ユーザ認証とかは無いみたいですね。■RockMongo次にRockMongoです。したがって、phpMoAdminと同様の方法で利用することが出来ます。/var/www/html/rockmongoこれで完了です。アクセスすると以下のような画面が現れます。ログイン認証もできますが、以下のように/var/www/html/rockmongo/config.phpの31行目を編集すれば認証を無くすことも可能です。false;するとこんな画面が現れます。RockMongoは結構機能が多そうですね。データの確認も見やすくていいです。■mongo-expressmongo-expressはJavaScript(node.js)製のGUIツールです。Bootstrapを利用しているようで綺麗です。config.jsデフォルトだとconfig.jsが無いため怒られます。config.default.jsをコピーして使いましょう。今MongoDBで認証は行っていないのでconfig.jsで認証が必要ないように変更します。変更しないとConnectionErrorとコンソールに出てきます。connected以下がアクセスした時の画面です。́・ω・`)w■Genghis最後にGenghisです。Genghisの読みがわからなくてぐぐったらチンギスハンのチンギスらしいです。installでもできるらしいのですが、PHPerな私はPHPのビルトインサーバを利用しました。(色々躓いたわけでは決してないです。Bootstrapを利用しているのでどことなくモダンな感じです。genghis.phpとして、アクセスしたら下のような画面にたどり着きました。localhostを選択すればlocalhostのサーバにつながります。serverとやれば、他サーバのMongoDBにもつなげることが出来そうです。localhostにつなげてみた画面が以下のようになります。Bootstrapのおかげかとても見やすいですが、findとinsertくらいの機能しかありませんでした。◯という感じでしょうか。データの確認レベルであればphpMoAdmin以外はどれも良さそうだなーと思いました。MongoDBにはAggregationやMap-Reduce機能もありますが、それら用のなにか特別な機能はなさそうでした。個人的にはGUIツールに要求する機能はデータの確認くらいという結論に至りました。すると、データの確認がカジュアルにできる、mongo-expressはかなりいいなと思います。(開発環境とはいえ誤って複雑なレコードを消したら泣きそうですがw)GUIツールは個人に依る部分があると思うので皆さんも試してみるといいかもしれません。みなさん、MongoDBのGUIツールと戯れてみてください。VagrantとVirtualboxを利用してMongoDBのGUIツールを検証出来るレポジトリです。MySQL編こんにちは、DBAの三浦(@hironomiu)です。ひょんなことからサービス利用前のioDrive(80G)で検証する機会を取れました。(ioDrive自体は販売初期の頃からサービスで使っていたりします。)スペック情報等は下記のfusionioのサイトを参照頂ければと思います。http://www.fusionio.com/platforms/iodrive/今回は前々からMySQLのDiskとしてどのくらいのパフォーマンスが出るのか興味があったので軽く動かしてみました。サービス利用前とあるように時間が相当限られていたのでioDrive(80G)に最適なOS、FileSystemの選定カーネル、my.cnf等の細かいチューニングは行っておらず、情報の採取についても代表的なものしか行っていません。64G)を用いてみました。こちらも上記の通り、同一条件ではありませんので、改めて厳密な性能検証では無くioDriveスゲー的な記事である点をご了承下さい。hdparmを各10回取得しました。302.394もうちょっとioDriveが行くかなと思いましたが、それでも十分早いですね。ddを1Gbyteで各10回取得しました。763.3シーケンシャルな書込みでは差が見受けられませんでした。ランダムI/0(bonnie++)についてはパスしました。汎用データベース負荷テストツール」を使用させて頂いて性能を取得しました。Hiratsukaさんのサイトを参照頂ければと思います。http://hp.vector.co.jp/authors/VA052413/jdbcrunner/テストシナリオはtpccで下記設定で各4回の結果を採用しました。countを抜粋しました。txこう見るとHDD(4玉RAID1+0)も結構がんばってるな~と見えるんですが、下記はjdbcrunnerで検証中のmpstatの抜粋です。64G)は省略しました。値を見る限り明らかにioDrive(80G)には余裕があるように見受けられます。今回は時間切れでここまでとなりますが、ioDrive(80G)に関してはまだまだ余力があり、チューニング次第で更に性能向上が見込めれるだけの様相は伺い知れました。触れる機会がありましたら次回はチューニングを行ってみて結果をBlogにあげてみたいと思います。システムソリューショングループの大竹(@tokosa)です。ECナビではDWHのNetezzaを使用し、データマートを構築しております。Netezzaに関しては、日本ネティーザのサイトをご覧下さい。実際Netezzaの性能がどの位なのか?何が出来るのかをご紹介します。Netezzaを使用して2つの集合の類似度を計る2つの集合の類似度を計る方法としてTanimoto係数(Jaccard係数の拡張)があります。Nc:共通集合Tbは0~1の間で0に近ければ類似度が低く1に近づく程類似度が高くなります。実際にDBで集計を行います。集計対象数(アイテム数):1000テンポラリーテーブルは作成せず、自己結合でSQLを実行させます。item_id4.1~3の結果をTanimoto係数の公式へ。単純に計算量はO(n^2)です。アイテム数が1000位なら一瞬です。0m0.031sアイテム数が10000超えると。先に集計しておくと良いでしょう。Netzzaは自己結合も弱いのでこちらは別にするべきです。今回はNetezzaの性能計る為、こんなSQLを書いています。Netezzaにもstddev(標準偏差)、stddev_pop(母標準偏差)、variance(式の分散)、var_pop(母分散)などなど解析関数が用意されています。協調フィルタリングの相関係数法もできますね。