1. 부모 callback 페이지 호출하기(페이지 전환 됨)

 

    1) 부모->자식 호출 시 callback 페이지명, callback 함수명 파라미터 넘기기

    2) 자식->부모 호출 시 요청받은 callback 페이지로 callback 함수와 리턴데이터 넘기기

    3) 부모 콜백페이지에서 opener.콜백함수(리턴데이터) 호출

 

2. iframe & postMessage 사용하기(iframe에서 호출되기 때문에 페이지 전환 없음)

 

    1) 부모페이지  window.addEventListener 선언

        ($(function){

            window.addEventListener("message", 콜백함수명 , false);

        });

 

    2) 부모->자식 호출 시 callback 페이지명, callback 함수명 파라미터 넘기기

 

    3) 자식페이지 iframe 생성(부모서버 콜백페이지 호출)

        <html>

            <iframe id="p_iframe" name="p_iframe" src="부모서버 콜백페이지" display:none;>

                <html>

                    <script>

                         window.addEventListener("message", function(e){

                            window.parent.opener.콜백함수명(e.data);

                         }, false);

                   </script>

                </html>

            </iframe>

        </html>

 

   4) 자식->부모 호출 시 postMessage를 통해 리턴데이터 넘기기

        $(".sendBtn").click(function(e){

            var jsonData = 리턴데이터;

            document.getElementById('p_iframe').contentWindow.postMessage(JSON.stringify(jsonData), "*");

        });

 

[오류]

 - IE 특정 버전에서 iframe 재호출 시 input text 박스 미작동

 - iframe 삭제 후 widnow events를 잃어버리는 현상

 - IE9버전부터 존재하는 오류.

  (같은 IE 11버전이라도 하위 버전에 따라 해당 오류 발생 유무 달랐음)

 

[해결과정]

  구글링해서 확인 해보니 iframe load시 첫번째 input 박스에 focus 주는 방식이 있었음.

  하지만 나의 경우 첫번째 input box에 focus 이벤트 로직이 존재하였고, 모든 layer 팝업에 이를 세팅해주는 방법은

  좋지 못한 방법이었음.

 

  IE환경 세팅으로 최대한 문제를 해결해보려 했으나 해결되지 않았고,

  결국 layer 팝업을 호출하는 공통함수에 아래와 같이 iframe 자체에 focus를 주어서 해결

  iframe[0].contentWindow.focus();

 

 

[참고사이트]

https://stackoverflow.com/questions/49372845/on-ie11-cannot-type-in-input-box-after-removing-iframe-with-contenteditable-tru

https://skypotato-note.tistory.com/121

 

 

미션 :: user1계정의 test_tbl 테이블을 user2계정에 SELECT 권한 주기.

 

1) 테이블 SELECT 권한 주기

 

   GRANT SELECT ON TABLE user1.test_tbl TO user2

   => user2 계정으로 접속해서, SELECT * FROM test_tbl; 를 돌려보니, test_tbl 테이블을 찾지 못하는 오류 발생.

 

2) 스키마 접근 권한 주기

 

   GRANT USAGE ON SCHEMA user1 TO user2;

   => 여전히 test_tbl 테이블을 찾지 못함.

 

3) SEARCH_PATH 세팅

 

   show search_path; // 현재 search_path 확인

   SET search_path TO user2, user1, public

   => SELECT * FROM test_tbl; 정상 조회 가능.

 

   ※ search_path 관련 참고사항

      - serach_path는 입력된 순서대로 테이블 스페이스를 읽는다.

      - 영구적으로 설정해주기 위해서는 postgresql.conf 파일에 search_path를 명시해주어야 한다.

         1) SELECT name, setting FROM pg_settings WHERE category = 'File Locations'; //postgresql.conf 파일 찾기

         2) postgresql.conf 파일에 search_path='user2, user1, public' 명시

 

 

★ 결론

   GRANT 권한 줄 때, 테이블 SELECT 권한만 주면 끝나는 것이 아니기 때문에, 

   스키마 권한, search_path 모두 확인 해주어야 하고, 권한이 없으면 해당 권한까지 넘겨 주어야 한다.

+ Recent posts