답은 나오지 않지만 계속 질문을 해 볼랍니다. ^^; 사실 여기밖에 별로 질문을 올린만한 곳도 없구요. 자료가 너무 없군요. www.borland.com 은 왜 이리 느리죠? 서버가 거의 마비된 정도이군요.
우선 질문은 아래에 올린 질문에 대한 답을 찾지 못해서 isc4.gdb에 필드를 추가해서 사용자별 Grant 를 따로 관리를 하게 편법을 썼습니다.
그래서 이번에 PROCEDURE 에서 사용자 GRANT 정보가 변경될 때마다 권한을 변경 해 주도록 만들려고 시도를 했습니다. 그런데 계속 GRANT에서 쿼리가 멈추는 군요.
SET TERM!!;
/* 사용자를 입력 한 이후 사용자명으로 권한 정보를 받아서 권한을 주거나 뺏는다. */
CREATE PROCEDURE REGRANT
(PUSER_NAME VARCHAR(128), PGRANT_SELECT CHAR(1), PGRANT_INSERT CHAR(1),
PGRANT_UPDATE CHAR(1), PGRANT_DELETE CHAR(1))
AS BEGIN
BEGIN
/* SELECT GRANT */
IF (:PGRANT_SELECT = 'Y') THEN
GRANT SELECT ON DISCUSSION TO :PUSER_NAME;
ELSE
REVOKE SELECT ON DISCUSSION FROM :PUSER_NAME;
/* INSERT GRANT */
IF (:PGRANT_INSERT = 'Y') THEN
GRANT INSERT ON DISCUSSION TO :PUSER_NAME;
ELSE
REVOKE INSERT ON DISCUSSION FROM :PUSER_NAME;
/* UPDATE GRANT */
IF (:PGRANT_UPDATE = 'Y') THEN
GRANT UPDATE ON DISCUSSION TO :PUSER_NAME;
ELSE
REVOKE UPDATE ON DISCUSSION FROM :PUSER_NAME;
/* DELETE GRANT */
IF (:PGRANT_DELETE = 'Y') THEN
GRANT DELETE ON DISCUSSION TO :PUSER_NAME;
ELSE
REVOKE DELETE ON DISCUSSION FROM :PUSER_NAME;
/* ERROR */
WHEN ANY DO
EXCEPTION E_GRANTERROR;
END
SUSPEND;
END!!
SET TERM;!!
PROCEDURE 를 만드는 구문입니다. CHAR(1) 은 BOOLEAN TYPE 대용으로 팁란에 있는걸 사용했구요.
PROCEDURE에서 GRANT나 REVOKE를 사용할 수가 없는지 아니면 구문에러인지 아무리 봐도 알 수가 없어서 질문을 올립니다. 정보 찾기도 정말 어렵구요.
답을 얻었으면 좋겠습니다.
|