- PR -

ADSI利用によるドメインからのユーザ削除

投稿者投稿内容
緑茶
常連さん
会議室デビュー日: 2008/04/08
投稿数: 21
投稿日時: 2008-04-08 16:40
よろしくお願いいたします。

ADSIを使用してのアカウント管理の勉強をしております。

ASPを利用してブラウザからアカウントの削除を行おうと試み、下記を実行したのですが
「HTTP500 内部サーバーエラー」となり削除できませんでした。Users配下にtest userは
存在してます。

<%
Set rootDSE = GetObject("LDAP://RootDSE")
strDomain = rootDSE.Get("defaultNamingContext")
Set objComputer = GetObject("LDAP://CN=Users," & strDomain )
Call objComputer.Delete( "User", "test user" )
%>

環境
OS:WindowsServer2003 StandardEdition SP2(AD,IIS)

・IISをインストールしており、同マシン上に仮想ディレクトリを作成しASPを許可していいます。
・同仮想ディレクトリ内に配置した他のASP(ADSIと関係ない単純なもの)は動作します。
・同マシン上のブラウザから実行しています

Web上で参考にしたいくつかのソースとほとんど同じものですので、IISの設定や、その他設定
だと思いますが、原因はわかりません。アドバイスを頂けないでしょうか。
IKE
常連さん
会議室デビュー日: 2008/03/24
投稿数: 46
投稿日時: 2008-04-08 18:43
そもそもスクリプト単体としては正しく動作するのですか?
Call objComputer.Delete( "User", "CN=test user" ) じゃないですか・・?
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2008-04-08 18:54
その code どの user がどのように logon して、どこの resource を扱うか考えましょう。
_________________
緑茶
常連さん
会議室デビュー日: 2008/04/08
投稿数: 21
投稿日時: 2008-04-09 14:28
回答ありがとうございます。

>IKEさん
>Call objComputer.Delete( "User", "CN=test user" ) じゃないですか・・?
失礼しました。その通りです。スクリプト単体として実行した時は、
下記のエラーとなってしまいました。

エラー:サーバーにそのようなオブジェクトはありません
コード:80072030

CN=○○○○ ←ここをユーザログオン名に変更してみましたが、同様のエラーとなりました。

>ちゃっぴさん
>user がどのように logon して、どこの resource を扱うか

test userがtestというログオンIDで、test.localドメインにログオンするのですが、
扱うresorceという点がよくわかっておりません、それと削除をどのように結びつけたらよいのでしょうか。

よろしくお願いいたします。
IKE
常連さん
会議室デビュー日: 2008/03/24
投稿数: 46
投稿日時: 2008-04-09 20:51
指定するのは、ログオン名ではなくLDAP識別名です。
ActiveDirectoryユーザとコンピュータで、表示−拡張機能にONにして
対象ユーザのオブジェクトの正規名を確認して下さい。

これを正しく指定できていないのではないでしょうか?
緑茶
常連さん
会議室デビュー日: 2008/04/08
投稿数: 21
投稿日時: 2008-04-10 16:07
>IKEさん

ご指摘ありがとうございました。教えていただいた方法で正規名を確認しましたが、
正規名も"test user"となっていました。そして、本当に申し訳ないのですが、問題は
別にありました。

スクリプト実行後の削除確認の際に、別のOU等を選択してからUsersを選択していましたが、
これでは削除結果が反映されず、F5キー等で更新することで削除を確認できました。後ろに
数字を一文字つけたようなユーザ名を手動で大量に追加したり、削除しており気づきません
でした。本当にすみません;

下記のスクリプトで削除処理ができました。

Set rootDSE = GetObject("LDAP://RootDSE")
strDomain = rootDSE.Get("defaultNamingContext")
Set objComputer = GetObject("LDAP://CN=Users," & strDomain )
Call objComputer.Delete( "User", "CN=test user" )

しかし、これを"<%"でくくりASPとしてブラウザで実行したところ、
「HTTP500 内部サーバーエラー」となってしまいました。何か問題となりそうな部分等
ございましたら、お教え頂けないでしょうか。よろしくお願いします。

IKE
常連さん
会議室デビュー日: 2008/03/24
投稿数: 46
投稿日時: 2008-04-10 18:15
スクリプト単体で動くなら、そこから先はちゃっぴさんが指摘している所なのだと思います。

ASPはよく解らないのですが、実行ユーザが変わってくるんじゃないですか?
・実行ユーザの所属ドメインは・・?
・実行ユーザにADユーザの削除権限があるか?
緑茶
常連さん
会議室デビュー日: 2008/04/08
投稿数: 21
投稿日時: 2008-04-10 19:42
>IKEさん

>実行ユーザにADユーザの削除権限があるか?

実行ユーザがadministratorのため権限は気にしていなかったのですが、ブラウザを通すと何か影響するのかと、IISの仮想ディレクトリの認証方法の設定の匿名アクセスをadministratorに変更してみたところ、同一マシン上、ドメイン上の別のマシンからも削除ができました。

ただ、これだとまずいと思いますので文字列でID、パスを渡す方法、またIISの設定等を調べようと思います。

大変有難うございました。

スキルアップ/キャリアアップ(JOB@IT)