ラベル ユーザーログイン の投稿を表示しています。 すべての投稿を表示
ラベル ユーザーログイン の投稿を表示しています。 すべての投稿を表示

2014年12月9日火曜日

えらいことしてもうた。。 (後に復帰)


ログインユーザーのパスワードの暗号化(ハッシュ)を試してみようとしたら。。。

Name : USER_PASSWORD_HASH
Configured Value : Y

でセーブして、、
ログアウトしたら。。。

ログインできなくなってしまいました。。。。
ユーザーはもちろんSuperUser でも System でも。。。

ちなみにDBを直接開いて AD_USERを見てみたのですが、変更前と同じでパスワードは平分のままです。

idempiere=# select ad_user_id, name, password from ad_user;
 ad_user_id |            name            |   password    
------------+----------------------------+---------------
        102 | GardenUser                 | GardenUser
        103 | Joe Sales                  | 
        104 | Carl Boss                  | 
        101 | GardenAdmin                | GardenAdmin
      50001 | WebService                 | WebService
        100 | SuperUser                  | System
    1000006 | clientUser                 | clientUser
    1000005 | clientAdmin                | clientAdmin
          0 | System                     | System
    1000020 | TaroSasaki                 | taro
    1000030 | hamadaj                    | hamadaj
    1000027 | NishijimaO                 | nishijimao
    1000028 | UedaE                      | uedae
    1000029 | takadas                    | takadas


なんか重要なステップがあったのかな?ログオフ前に既存ユーザーのパスワードをハッシュかするバッチプロセスを流すとか、、、、

というわけで、先にすすめませぬ。。
だめな場合はもう一度クライアントから作り直しかな?

と思ったら、、

DBの AD_SYSCONFIG を開いて中身書き換えたら無事復帰しました。
あーよかった。

同じ失敗してしまった人向けに一応記録残しておきます。


idempiere=# select ad_sysconfig_id, name, value from ad_sysconfig               ;
 ad_sysconfig_id |                        name                        |         
                    value                              
-----------------+----------------------------------------------------+---------
-------------------------------------------------------
          200013 | USER_PASSWORD_HASH                                 | Y
(73 rows)

idempiere=# update ad_sysconfig set value = 'N' where name = 'USER_PASSWORD_HASH';
UPDATE 1
idempiere=# select ad_sysconfig_id, name, value from ad_sysconfig
;
 ad_sysconfig_id |                        name                        |         
                    value                              
-----------------+----------------------------------------------------+---------
-------------------------------------------------------
          200013 | USER_PASSWORD_HASH                                 | N
(73 rows)


idempiere=# 



もちっと調べてから後日再挑戦します。

2014年12月1日月曜日

iDempiere ログインユーザーを登録してみた

業務の流れを一から整理しようと思っているんですが、なかなか進まず。

その前にログイン時の「振る舞い」について確認できたことを。。。

今までは常に SuperUser でログインして来ました。テストなんだからいいんだけどさ。
もちろん実際にはあり得ない話で、ログインして業務を行うユーザー個人を識別して、権限をコントロールできなきゃいかんです。当然ですが、、、




ためしに Business Partner にEmployee として登録した人でログインしようとしてもパスワードなんて入力した記憶ないし、それにEmployee名は漢字で登録してもうた。

そんなわけであれこれいじりながらユーザーでのログインまでの登録の流れ把握しました。(結果論なのですが、、)

まず、ユーザーでログインするためにはユーザー登録をします。
menu -> System Admin -> General Rules -> Security -> User

Business Partner の Contact(User) で登録している人がいれば検索画面が出てきます。


今は大した人数でもないので空白で OKすれば該当するユーザーのうちいずれか1件表示されます。
前後させながら探してもいいのですが、サーバーの負荷により「もっさり」した動作なので一覧を表示させてそこから探します。
Grid tOggle アイコンで一覧表示させた方が良いでしょう。
Grid tOggleアイコンは名前の通りトグルスイッチなので、グリッド(一覧)と単票を切り替えることができます。(検索結果が複数ある場合はまずグリッド表示してくれた方が嬉しいと思うのですが、、、)
グリッド表示させてみると、 Business Partner の Contacts で登録した人が並んでいます。



Customer やVendorであれば、担当者が複数存在していてBusiness Partner に複数の Contact(User)を登録できるのはわかりやすいのですが(1:Nの関係)、Employee の場合は??
Business Partner 1に対して複数の Contact(User)を登録することがあり得るのか?

Business Partner という意味においてデータ構造を統一するため、「Employeeでも複数Contact(User) を登録しようと思えばできる」程度と考えた方が良いのかもしれません。
複数のContact(User)を登録可能ですが、Employee の場合は Contact(User) は一つだけ登録するものだと運用で決めれば良いでしょう。

で、登録したいユーザーを選択、子タブ(画面下)から User Roles を新規追加します。

そのユーザーに割り当てるRoleを登録します。



通常子タブのレコードを作成後、↑ボタンで親タブへ戻るとセーブされます。
この role の所ではセーブされなかったのでちょっと驚いたのですが、割り当てる role をデフォルトから変更後は↑ボタンでセーブされました。
つまりRole をデフォルトのままにする場合は明示的に保存ボタンを押す必要があるようです。

初期は Admin と User のRole がありますが、もちろん必要に応じてロールを追加することが可能です。(いずれ試してみたいと思っています。)
menu -> System Admin -> General Rules -> Security -> Role


ここで User に対して User Role を登録してはじめてユーザーでログインできるようになります。
ちなみにUser Roles を登録する前は Invalid User と表示されてログインできません。



User Roles を登録したユーザーはログインができるようになります。
















ユーザーロールを複数割り当てることも可能です。

不思議なのは User を開くと Contacts に登録した情報にたどり着いて、そこから User Role が登録できるのに、Business Partner から Contacts を開いても Role の登録画面にたどり着けないことです。まぁ、視点が違うからでしょうけど、、

ユーザー名でログインしてパスワードを変更したりするには
そのユーザーでログインして
menu -> System Admin -> General Rules -> Security -> Reset Password
にて変更が可能と思われます。(まだ試していない)
運用時Super User などは変更しておくべきでしょう。


ユーザーログイン時にパスワードやユーザー名を覚えさせるのを禁じたり、パスワードを暗号化したり、ログイン時の振る舞いを変更するには
menu -> System Admin -> General Rules -> System Rules -> Security Configurator
にて設定されているようです。(まだ試していない)
例えばパスワードの暗号化はUSER_PASSWORD_HASH行をいじると変更できそうなのですが、単純に画面を開いても変更不可となっているようなので現時点では確認はあきらめて、また必要に応じて変更方法を確認しようと思っています。
(既存のユーザーのパスワードは変更されないのかな?試してみたらサーバーのDBを SQLで覗いてみます。。)


まとめとしてBusiness Partner 、User(Contacts), User, User Roles の関係を整理しておきます。



ログインユーザーの登録はMenuからの階層で言えば Partner Relations からの階層と、 System Adminからの階層両方からの登録が必要です。

Partner Relations からの階層の Contact (User) と System Admin からの階層 User のデータは同じもの(テーブル)を指しているため、どちらの画面で入力・変更しても常に同一の内容になります。

ログインのため必要な User Roles は、System Admin からの階層からしか辿ることができません。(正しい階層設計だと思います)

ログインで使うUser nameは、今回登録したユーザー名ではなく、E-mail でのログインの方が運用しやすいと思います。単に名前だとユニークであることを担保するのは面倒だったりしますので、、

E-mailでのログインへの変更方法は

User: System
Pasword: Sytem でログオンして、

menu -> System Admin -> General Rules -> System Rules -> Security Configurator から
USE_EMAIL_FOR_LOGINの値を Configured Value を Yにするとできます。


なお、この変更をしてしまうとこれまでの SuperUser や System ユーザーのログインも変わってしまいます。
それぞれ次のユーザー名となります。(パスワードは変わらず)
SuperUser  -> superuser @ idempiere.com
System  ->  system @ idempiere.com

なお、なぜか @ の前後には半角スペースが必要ですので気をつけてください。
(あと、ユーザー名はすべて小文字なので、そのまま @ 以降追加してもログインできずに焦ります。)