mssql 로그인 계정정보추출 database

CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
DECLARE @name    sysname
DECLARE @xstatus int
DECLARE @binpwd  varbinary (256)
DECLARE @txtpwd  sysname
DECLARE @tmpstr  varchar (256)
DECLARE @SID_varbinary varbinary(85)
DECLARE @SID_string varchar(256)

IF (@login_name IS NULL)
  DECLARE login_curs CURSOR FOR
    SELECT sid, name, xstatus, password FROM master..sysxlogins
    WHERE srvid IS NULL AND name <> 'sa'
ELSE
  DECLARE login_curs CURSOR FOR
    SELECT sid, name, xstatus, password FROM master..sysxlogins
    WHERE srvid IS NULL AND name = @login_name
OPEN login_curs
FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
IF (@@fetch_status = -1)
BEGIN
  PRINT 'No login(s) found.'
  CLOSE login_curs
  DEALLOCATE login_curs
  RETURN -1
END
SET @tmpstr = '/- sp_help_revlogin script '
PRINT @tmpstr
SET @tmpstr = '** Generated '
  + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' *-'
PRINT @tmpstr
PRINT ''
PRINT 'DECLARE @pwd sysname'
WHILE (@@fetch_status <> -1)
BEGIN
  IF (@@fetch_status <> -2)
  BEGIN
    PRINT ''
    SET @tmpstr = '-- Login: ' + @name
    PRINT @tmpstr
    IF (@xstatus & 4) = 4
    BEGIN -- NT authenticated account/group
      IF (@xstatus & 1) = 1
      BEGIN -- NT login is denied access
        SET @tmpstr = 'EXEC master..sp_denylogin ''' + @name + ''''
        PRINT @tmpstr
      END
      ELSE BEGIN -- NT login has access
        SET @tmpstr = 'EXEC master..sp_grantlogin ''' + @name + ''''
        PRINT @tmpstr
      END
    END
    ELSE BEGIN -- SQL Server authentication
      IF (@binpwd IS NOT NULL)
      BEGIN -- Non-null password
        EXEC sp_hexadecimal @binpwd, @txtpwd OUT
        IF (@xstatus & 2048) = 2048
          SET @tmpstr = 'SET @pwd = CONVERT (varchar(256), ' + @txtpwd + ')'
        ELSE
          SET @tmpstr = 'SET @pwd = CONVERT (varbinary(256), ' + @txtpwd + ')'
        PRINT @tmpstr
EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
        SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name
          + ''', @pwd, @sid = ' + @SID_string + ', @encryptopt = '
      END
      ELSE BEGIN
        -- Null password
EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
        SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name
          + ''', NULL, @sid = ' + @SID_string + ', @encryptopt = '
      END
      IF (@xstatus & 2048) = 2048
        -- login upgraded from 6.5
        SET @tmpstr = @tmpstr + '''skip_encryption_old'''
      ELSE
        SET @tmpstr = @tmpstr + '''skip_encryption'''
      PRINT @tmpstr
    END
  END
  FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
  END
CLOSE login_curs
DEALLOCATE login_curs
RETURN 0

GO





실행법
exec master..sp_help_revlogin


네이버 openapi jquery ajax로 이용시 프록시 jsp 생성

우선 글을 쓰기에 앞서 해당 구현방법은 철저히 개인적인 방법임을 밟히는 바이다.
(이방법이 최적의 방법 혹은 정석이 될수 없음을 미리 알리는 바이다.)

요즘 네이버나 다음과 같은 여러 포탈 사이트에서 오픈API를 제공하고 있다.
거의 모든 오픈API의 방식이 개인키를 부여하여 특정주소를 요청하면 XML로 결과를 리턴해주는 방식이다.

AJAX 에서의 자바스크립트는 기본적으로 XMLHttpRequest 객체의 open()메소드와 send()메소드를 이용해서 해당 uri의 xml을 요청할 수 있다.

하지만 자바스크립트의 보안제약사항에 따라 XMLHttpRequest 객체는 해당 페이지를 로딩한 서버 외에는 연결할 수 없게 되어있다.
그래서 오픈API요청을 자바스크립트에서 바로 사용할수가 없다.

이것을 해결하기 위해선 여러방법이 있겠지만 그중에서 나는 서버에서 해당 오픈API요청을 대신하고 결과를 보여주는 프록시페이지를 만들어 보기로 했다.

해당 구현방법을 알아보기위해 인터넷의 넓은 바다를 항해한 결과,
아파치 자카르타 프로젝트의 commons HttpClient API를 이용하여 구현하는 방법을 찾게 되었다.

모든 구현을 완료하고 페이지를 실행해보았지만 문제가 생겼다.
좀더 삽질을 하고난후 commons logging APIcommons codec API도 필요하다는것을 알게되었다.
(logging, codec 이 왜 필요한지는 아직 알수없었다. 디버깅과정에서 ClassNotFound 가 뜨는 것들을 추가해주다가 알게되었다.)
(초보의 무식함이다 =..= 만약 아직도 안되고있었다면 계속 삽질을? ;;;)

proxy.jsp

<%@ page language="java" pageEncoding="utf-8"%>
<%@ page import="org.apache.commons.httpclient.HttpClient" %>
<%@ page import="org.apache.commons.httpclient.methods.GetMethod" %>
<%@ page import="org.apache.commons.httpclient.HttpStatus" %>

<%
request.setCharacterEncoding("utf-8");

String url = "오픈API요청URI";
HttpClient client = new HttpClient();
GetMethod method = new GetMethod(url);

try{
int statusCode = client.executeMethod(method);
out.clearBuffer();
response.reset();
response.setStatus(statusCode);
if(statusCode == HttpStatus.SC_OK){
String result = method.getResponseBodyAsString();
response.setContentType("text/xml; charset=utf-8");
out.println(result);

}
}finally{
if(method != null) method.releaseConnection();
}
%>


나는 네이버 실시간 음악 순위를 리턴받아 보았다.
(get방식으로 파라미터값을 받을수있도록 jsp를 구현한 상태이다.)

http://cyzest.cafe24.com/open/rank/proxy_rank.jsp?query=music


이제 자바스크립트의 XMLHttpRequest 객체에서의 open() 메소드에서는 오픈API주소가 아닌 proxy.jsp 의 주소를 요청하면 되는 것이다.

http://cyzest.cafe24.com/open/rank


이제 해당 오픈API의 결과를 유용하게 이용하도록 구현하는 것은 사용자의 몫이 될것이다. :)

프록시를 해서 가져올때 xml 을 파싱하는 과정에서 IE에서는 find jquery 함수가 잘 안먹는다.

해당 이유는 출처 : http://blog-kr.specialguy.net/89

아...꼬박 이틀동안 삽질했다 -_-;;;;

jQuery를 배워보고자 어제부터 즐겨하는 게임을 위해(WOW) PostgresSQL+PHP+jQuery로 간단한 프로그래밍을 시작하였다.

암튼!
jQuery로 AJAX와 XML 처리가 간단하다고 하여...요즘 트랜드라고도 하고...해서...
jQuery로 해당 부분을 시험삼아 개발하고 있는 중...
Iron(≒크롬)과 Firefox에서는 정상동작 하지만 IE(익스플로러)에서는 동작하지 않는 것을 발견하였다.

결론을 말하면..
IE에서 해더 없이는 XML로 제대로 인식이 안 된다는 것이었다.
왜!!!!!!!!!! 왜!!!!!!! 그냥 문서를 직접 URL 타이핑 해서 읽을 땐 XML로 잘 인식을 했냔 말이다 ㅠㅠ

위의 블로그에 해결 방안들을 제시하고 있지만, XML 문서를 생성하는 소스를 수정하는 것이 제일 정직하고 확실한 방법인 것 같다.
아래와 같이 해더를 추가해 주면 된다.
PHP로 개발하고 있는 것이기에 아래와 같이...

header('content-type:application/xml; charset=utf-8');

JSP 의 경우에는 response.setContentType("application/xml; charset=EUC-KR"); 를 하였음. 근데 깨진다. 왜그런지는;;;

PHP가 아니라 다른 언어로 개발 중이라면 위의 내용과 맞게 수정해 주면 된다.
단, 지금 개발 하는 것이 UTF-8로 개발하고 있기에 위의 코드가 나오는데..
euc_kr이나 다른 언어로 개발 중이라고 하면 해당 언어 코드로 변경을 해 주어야 하는 것은 당연!!

감사합니다. LazyGyu님! ^^

map_point_proxy.jsp 을 첨부함.

<%@page contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR" language="java" import="java.sql.*,java.util.*,com.smarton.athena_alpha.company.*" errorPage="" %>

<%@page import="org.apache.commons.httpclient.*" %>

<%@page import="org.apache.commons.httpclient.methods.*" %>

<%@ include file="/ata/incl_common/nocache.jsp" %>

<%@ include file="/ata/incl_common/session.jsp" %>

<%

request.setCharacterEncoding("euc-kr");


String url = "http://map.naver.com/api/geocode.php";

String key = "4f66e85df980f7bd3b729c1263c33880";

String query = request.getParameter( "query" );


HttpClient client = new HttpClient();

HttpMethod method = new GetMethod(url);


NameValuePair nvp1= new NameValuePair("key",key);

NameValuePair nvp2= new NameValuePair("query",query);

method.setQueryString(new NameValuePair[]{nvp1,nvp2});

try{

int statusCode = client.executeMethod(method);

out.clearBuffer();

response.reset();

response.setStatus(statusCode);

if(statusCode == HttpStatus.SC_OK){

String result = method.getResponseBodyAsString();

response.setContentType("application/xml; charset=EUC-KR");

out.println(result);

}

}

finally{

if(method != null) method.releaseConnection();

}

%>

위 소스는 완전한게 아니다. 왜냐하면. 해당

프록시를 불러오는 페이지에서 왜그런지모르겠지만 포인트 이외의 부분이 깨지기 때문이다.

function getMapPoint()

{


var address = $('#address').val();



var pointCount;

var pointX;

var pointY;

$.get("map_point_proxy.jsp",{query:address},function(data) {


// 프록시 jsp 파일을 통해서 해당 주소를 쿼리로 넘기고 이에 대한 네이버 지도 좌표값을 얻어 온 결과를 확인함

$(data).find("total").each(function(cnt){

// 총 몇개의 주소 좌표가 검색되었는지 확인함

if(cnt == 0 )pointCount = $(this).text();

});


// 주소 좌표 검색 결과가 하나라도 존재할때, 포인트 좌표를 얻어오는 동작을 수행함.

if(pointCount > 0 ){


// 해당 주소로 검색된 좌표중에서 무조건 첫번째 좌표를 기준으로 함.

pointX = $(data).find("x").first().text();

pointY = $(data).find("y").first().text();


}

});

}

출처 : http://cyzest.tistory.com/8

재출처 : http://devel.findstar.pe.kr/64


[jquery] 예제로 만나보는 제이쿼리 - 비동기 파일업로드 자바스크립트

ajax로 개발을 하다보면 파일업로드도 비동기로 처리하고 싶을때가 있는데
작년에 내가 비동기 처리를 하기 위해 검색의 검색의 검색을 해보아도 한국어으로 된 예제나 샘플을
찾아 볼수 없었다. 그래서 해외사이트를 두루두루 돌아다닌결과 처리 할 수 있는 방법을 찾았는데
맨날 공개한다. 공개한다. 미루다가 이제와서 샘플과 함께 소스도 공개한다.

그럼 비동기 파일전송을 하기 위해선 어떻게 해야할까?
일단 페이지 리로드가 없이는 서버쪽 페이지를 호출할수 없기에 이론상으론 불가능하다.
하지만 우린 ajax라는 기술로 페이지의 리로딩이 없이 서버쪽 페이지를 호출하기 시작했다.
(ajax에 관해 무슨말인지 모른다면 태요님이 설명한 글을 읽어보면 도움이 됩니다. 클릭)
하지만 ajax를 기술을 이용해도 파일전송이 쉽지 않았으니... ajax전문가인 친구녀셕에서 물어보았더니
iframe으로 처리해야 가능하다라는 결론, 그리고 나서 이리저리 수소문 끝에 제이쿼리 플러그인중에 하나인
jquery.form을 이용해서 파일전송이 가능하다는 샘플을 찾았다. (회사 과장님이 해외포럼에서 찾아주셨음)

결국 플러그인의 소스를 뒤지고 뒤지고 보니 내부적으로 iframe을 생성해서 사용한다는 것을 확인 할 수 있었는데
우린 그냥 이 플러그인을 이용해서 iframe을 만들어 처리할 필요없이 아주~~ 간단하게 사용할수 있다는 것이다.


                                              (jquery.form.js 파일 일부)

비동기 파일전송 소스는 매우 간단하다.



일단 ready()함수에 해당 문구를 넣어줘야 하는데 ajaxForm();안에 있는 FileuploadCallback는
파일업로드가 완료되고 나서 즉 서버쪽 페이지를 호출하고 나서 실행된 콜백 메소드라고 생각하면 된다.
그리고 하단의 submit()안에 return false를 해줘야 현재 페이지의 변화가 없다.
고로 frmFile이란 폼의 action값을 내부적으로 만든 iframe에서 처리하고 밖에 페이지는 페이지 변화가 없기 위해
retun false를 했다고 볼수 있다. (파일전송과 동시에 다른 작업을 하고 싶다면 이곳에 다른 명령어나 함수를 넣어도 된다.)

그럼 콜백 메소드를 확인해보자



사실 별거 없다. 결과값이 error이면 에러메세지를 보여주는게 끝이다. 간단한 예제라 이렇지만
실제 서비스에선 이쪽 콜백메소드에서 처리할게 많아 진다.

다음은 실제 전송하는 부분



그냥 submit() 하는게 다다. 하지만 제이쿼리 폼을 이용했기 때문에 내부적으로 생성된 iframe에서
ajax_fileupload.asp의 파일이 처리되고 처리가 완료되면 콜백메소드가 실행될 것 이다.

아래는 실행결과다.




아주 간단하다. ajax_fileupload.asp 안에 소스는 각각의 입맛에 맞게 ABCUploadDextUpload같은
컴포넌트를 이용해서 처리하면 된다.

샘플파일: upload.zip


설마 아직까지 웹페이지를 개발하면서 제이쿼리를 안쓰고 있다면 다시 이런 생각을 한번 해보았으면 한다.

1. 포크가 있는데 손으로 음식을 먹고 있습니까?
2. 핸드폰이 있는데 삐삐를 가지고 다니나요?
3. 초고속 인터넷이 있는데 모뎀을 이용하나요?



jquery가 있는데 javascript만 쓰시겠습니까?


(나 완전 제이쿼리 선구자 같네 -0-;) ㅋㅋㅋ 그냥 쓰면 좋다구요~

http://www.hanji.pe.kr

upload.zip

비번번호 유효성 체크 (문자, 숫자, 특수문자의 조합으로 6~16자리) 자바스크립트

/// <summary>
/// 비번번호 유효성 체크 (문자, 숫자, 특수문자의 조합으로 6~16자리)
/// </summary>
function CehckPassWord(ObjUserID, ObjUserPassWord, objUserPassWordRe)
{

    if(ObjUserPassWord.value != objUserPassWordRe.value)
    {
        alert("입력하신 비밀번호와 비밀번호확인이 일치하지 않습니다");
        return false;
    }

    if(ObjUserPassWord.value.length<6)
    {
        alert("비밀번호는 문자, 숫자, 특수문자의 조합으로 6~16자리로 입력해주세요.");
        return false;
    }

    if(!ObjUserPassWord.value.match(/([a-zA-Z0-9].*[!,@,#,$,%,^,&,*,?,_,~])|([!,@,#,$,%,^,&,*,?,_,~].*[a-zA-Z0-9])/))
    {
        alert("비밀번호는 문자, 숫자, 특수문자의 조합으로 6~16자리로 입력해주세요.");
        return false;
    }
   
    if(ObjUserID.value.indexOf(ObjUserPassWord) > -1)
    {
        alert("비밀번호에 아이디를 사용할 수 없습니다.");
        return false;
    }
   
    var SamePass_0 = 0; //동일문자 카운트
    var SamePass_1 = 0; //연속성(+) 카운드
    var SamePass_2 = 0; //연속성(-) 카운드


   
    var chr_pass_0;
    var chr_pass_1;

    var chr_pass_2;

   
    for(var i=0; i < ObjUserPassWord.value.length; i++)
    {
        chr_pass_0 = ObjUserPassWord.value.charAt(i);
        chr_pass_1 = ObjUserPassWord.value.charAt(i+1);
       
        //동일문자 카운트
        if(chr_pass_0 == chr_pass_1)
        {
            SamePass_0 = SamePass_0 + 1
        }
       
      
        chr_pass_2 = ObjUserPassWord.value.charAt(i+2);
        //연속성(+) 카운드

        if(chr_pass_0.charCodeAt(0) - chr_pass_1.charCodeAt(0) == 1 && chr_pass_1.charCodeAt(0) - chr_pass_2.charCodeAt(0) == 1)
        {
            SamePass_1 = SamePass_1 + 1
        }
       
        //연속성(-) 카운드
        if(chr_pass_0.charCodeAt(0) - chr_pass_1.charCodeAt(0) == -1 && chr_pass_1.charCodeAt(0) - chr_pass_2.charCodeAt(0) == -1)
        {
            SamePass_2 = SamePass_2 + 1
        }
    }
    if(SamePass_0 > 1)
    {
        alert("동일문자를 3번 이상 사용할 수 없습니다.");
        return false;
    }
  
    if(SamePass_1 > 1 || SamePass_2 > 1 )
    {
        alert("연속된 문자열(123 또는 321, abc, cba 등)을\n 3자 이상 사용 할 수 없습니다.");
        return false;
    }
 return true;


출처 : http://fallove.blog.me/70068794745


리눅스에서 윈도우 공유 폴더 마운트 리눅스

1. 윈도우 측 확인사항
    . 관리도구-로컬정책-보안옵션
      Microsoft 네트워크 클라이인트: 디지털 서명 통신(향상) 사용안함으로 설정
  
    . 공유하고자 하는 디렉토리 공유 설정, 이때 everyone계정 제거, 공유폴더 전용사용자 지정, 접근제한 설정

    . 방화벽 예외탭 파일 및 프린터 공유메뉴
      TCP 139, TCP 445, UDP 137, UDP 138 마운트 하고자 하는 리눅스 서버 IP지정

2. 리눅스 측 
    . mount 명령어 실행
      mount -t cifs -o username=공유폴더사용자ID,password=공유폴더사용자PW '\\222.122.140.54\공유이름' /리눅스 마운트 경로

1 2 3 4 5 6 7 8 9 10 다음