Yeah! That's it! Thank you very much, Andy!
You simply have to provide an empty user AND an empty password AND
ora_session_mode of SYSDBA:
-------------------------------
$ cat dummy.pl
#!/usr/bin/perl -wT
# setup environment
BEGIN {
$ENV{ORACLE_HOME} = '/oracle/app/oracle/product/9.2.0';
$ENV{ORACLE_SID} = 'ora920';
}
use strict;
use DBI;
# does'nt work im my environment:
# "ora_session_modes" is not defined in %DBD::Oracle::EXPORT_TAGS
#use DBD::Oracle qw/:ora_session_modes/;
my $mode = 2; # SYSDBA
# $mode = 4; # SYSOPER
my $dbh = DBI->connect( 'dbi:Oracle:','', '',
{ ora_session_mode => $mode,
RaiseError => 1, AutoCommit => 0 } )
|| die "cannot connect to oracle\n $DBI::errstr\n";
print $dbh->selectrow_array('select instance_name from v$instance') . "\n";
print $dbh->selectrow_array('select user from dual') . "\n";
$dbh->disconnect;
__END__
-------------------------------
$ perl -wT dummy.pl
ora920
SYS
-------------------------------
----- Original Message -----
From: "Andy Hassall" <[EMAIL PROTECTED]>
To: "Christian Merz" <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
Sent: Thursday, June 05, 2003 11:35 PM
Subject: Re: Oracle connect internal/OS authentification
> Christian Merz wrote:
> > this topic has been discussed several times, i know. But i have not
> > seen a solution by now.
> >
> > On UNIX i can open an Oracle DB "connect internal" connection by
> > $ sqlplus "/ as sysdba"
> > when i am in OS group 'dba' - there is no need to specify a password.
> >
> > Whichever type of connection i use with DBI i HAVE TO specify a
> > password. But i certainly do not want to code my sys/system passwords
> > in my skripts.
> >
> > Any short slution on this?
>
>
> FWIW it _appears_ to work on Windows, at least, unless I've done
something
> silly?
>
> #!perl -w
> use strict;
> use DBI;
> use DBD::Oracle qw/:ora_session_modes/;
>
> my $dbh = DBI->connect('dbi:Oracle:',
> shift||'',
> shift||'',
> {
> RaiseError => 1,
> AutoCommit => 0,
> ora_session_mode => ORA_SYSDBA,
> })
> or die DBI->errstr;
>
> print $dbh->selectrow_array('select instance_name from v$instance') .
"\n";
> print $dbh->selectrow_array('select user from dual') . "\n";
>
> $dbh->disconnect;
>
> __END__
>
> ActiveState Perl 5.8.0, DBD-Oracle 1.14 + a couple of minor patches
(nothing
> to do with OS auth though), DBI 1.37.
> Windows 2000, Oracle 9.2.0.3, user is a member of the ORA_DBA group and OS
> authentication temporarily turned on for this test.
>
> Running this with a few different parameters gives:
>
> [EMAIL PROTECTED] /cygdrive/h/temp
> $ perl os_auth_test.pl
> dev92
> SYS
>
> [EMAIL PROTECTED] /cygdrive/h/temp
> $ perl os_auth_test.pl darth vader
> dev92
> SYS
>
>
> [EMAIL PROTECTED] /cygdrive/h/temp
> $ perl os_auth_test.pl darth
> DBI connect('','darth',...) failed: ORA-01005: null password given; logon
> denied (DBD ERROR: OCISessionBegin) at os_auth_test.pl line 6
>
> Which seems to show it works... but if you specify a username you have to
at
> least put some nonsense in for the password.
>
> Also works if I put the database name into the DSN, i.e.
'dbi:Oracle:dev92'.
>
> (Haven't got around to putting Oracle on the Linux partition yet though,
and
> haven't got access to a Unix environment with Oracle until next week; so
> milage may vary on Unix)
>
> --
> Andy Hassall ([EMAIL PROTECTED]) icq(5747695) (http://www.andyh.co.uk)
> Space: disk usage analysis tool (http://www.andyhsoftware.co.uk/space)
>